LSTM模型报错TypeError: 'int' object is not iterable的修复求助
解决LSTM模型构建中的TypeError: 'int' object is not iterable问题
问题背景
构建LSTM模型时触发如下错误:
TypeError: 'int' object is not iterable
相关代码:
parameters1 = len(data.columns) model = Sequential() model.add(LSTM(24, input_shape = parameters1, return_sequences=True)) model.add(LSTM(12)) model.add(Dense(6, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
推测问题出在input_shape参数,但不清楚具体修复方法。
问题原因
Keras中LSTM层的input_shape参数要求传入可迭代的元组,用来定义输入数据的形状(不包含批量维度)。直接传入整数会导致Python尝试迭代该整数时触发错误。
LSTM处理序列数据,输入形状格式为(时间步长, 特征数):
- 时间步长:序列的长度(比如每个样本包含的时间点数量)
- 特征数:每个时间点对应的特征数量(即你代码中
parameters1的值)
修复方案
将input_shape的整数参数改为元组形式,根据数据情况选择以下写法:
- 固定时间步长:如果输入序列是固定长度(比如每个样本仅1个时间步),直接指定时间步长:
parameters1 = len(data.columns) model = Sequential() # 这里假设时间步长为1,根据实际数据调整第一个数值 model.add(LSTM(24, input_shape=(1, parameters1), return_sequences=True)) model.add(LSTM(12)) model.add(Dense(6, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
- 可变时间步长:如果需要模型支持任意长度的输入序列,将时间步长设为
None:
parameters1 = len(data.columns) model = Sequential() model.add(LSTM(24, input_shape=(None, parameters1), return_sequences=True)) model.add(LSTM(12)) model.add(Dense(6, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
注意事项
确保输入数据形状与input_shape匹配:输入数据需为(样本数, 时间步长, 特征数)格式,若不符合需先做reshape处理。
内容的提问来源于stack exchange,提问作者sara ebrahimi
相关产品推荐
相关产品推荐

