You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,单数形式会被视为未定义参数

额外优化建议

  1. 统一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
  1. 关于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:03:39