Keras报错NameError: name 'input_shape' is not defined求助
解决NameError: name 'input_shape' is not defined及相关LSTM模型构建问题
核心问题修复
你遇到的NameError是因为input_shape是LSTM层的关键字参数,需要以元组形式传入,而非当成函数调用。同时代码里还有一处拼写错误:
- 错误写法:
model.add(LSTM(128, input_shape(n_words, len(unique_tokens)), return_sequence=True)) - 正确写法:
model.add(LSTM(128, input_shape=(n_words, len(unique_tokens)), return_sequences=True))
关键说明:
input_shape=(序列长度, 特征数):必须用括号包裹成元组,作为关键字参数传递return_sequences=True:注意是复数形式sequences,单数形式会被视为未定义参数
额外优化建议
- 统一Keras导入:你的代码同时导入了
tensorflow.keras和原生keras模块,会导致命名空间冲突,建议删除重复的原生Keras导入,只保留TensorFlow版本:
# 保留这部分即可,删除后续重复的keras导入 import random import pickle import numpy as np import pandas as pd from nltk.tokenize import RegexpTokenizer from tensorflow.keras.models import Sequential, load_model from tensorflow.keras.layers import LSTM, Dense, Activation, InputLayer from tensorflow.keras.optimizers import RMSprop
- 关于InputLayer的正确用法:如果想用InputLayer定义输入形状,需单独添加该层,而非直接在LSTM里调用
InputLayer.input_shape:
model = Sequential() model.add(InputLayer(input_shape=(n_words, len(unique_tokens)))) model.add(LSTM(128, return_sequences=True))
完整修正后的模型构建片段
# 前面的数据处理部分保持不变... model = Sequential() # 方式一:直接在LSTM层指定input_shape model.add(LSTM(128, input_shape=(n_words, len(unique_tokens)), return_sequences=True)) # 后续可继续添加输出层 model.add(Dense(len(unique_tokens))) model.add(Activation('softmax')) model.compile(loss='categorical_crossentropy', optimizer=RMSprop(learning_rate=0.01), metrics=['accuracy'])
内容的提问来源于stack exchange,提问作者Rick
相关产品推荐
相关产品推荐

