Python Keras LSTM输入尺寸设置
我试着用keras来训练LSTM模型,但我想我搞错了 我犯了一个错误 ValueError:检查输入时出错:预期lstm_17_输入具有 3维,但得到了具有形状的数组(10000,0,20) 虽然我的代码看起来像Python Keras LSTM输入尺寸设置,python,tensorflow,deep-learning,keras,lstm,Python,Tensorflow,Deep Learning,Keras,Lstm,我试着用keras来训练LSTM模型,但我想我搞错了 我犯了一个错误 ValueError:检查输入时出错:预期lstm_17_输入具有 3维,但得到了具有形状的数组(10000,0,20) 虽然我的代码看起来像 model = Sequential() model.add(LSTM(256, activation="relu", dropout=0.25, recurrent_dropout=0.25, input_shape=(None, 20, 64))) model.add(Dense(
model = Sequential()
model.add(LSTM(256, activation="relu", dropout=0.25, recurrent_dropout=0.25, input_shape=(None, 20, 64)))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy',
optimizer='adam',
metrics=['accuracy'])
model.fit(X_train, y_train,
batch_size=batch_size,
epochs=10)
其中,X\u列车
的形状为(10000,20)
,前几个数据点如下
array([[ 0, 0, 0, ..., 40, 40, 9],
[ 0, 0, 0, ..., 33, 20, 51],
[ 0, 0, 0, ..., 54, 54, 50],
...
而y\u列
的形状为(10000,)
,是一个二进制(0/1)标签数组
有人能指出我错在哪里吗?为了完整起见,这里是发生的事情 首先,
LSTM
与Keras中的所有层一样,接受两个参数:input\u-shape
和batch\u-input\u-shape
。不同之处在于,按照惯例,input\u shape
不包含批次大小,而batch\u input\u shape
是包含批次大小的完整输入形状
因此,规范input\u shape=(None,20,64)
告诉keras需要一个四维输入,这不是您想要的。正确的答案应该是(20,)
但这还不是全部。LSTM层是一个循环层,因此它需要一个三维输入(批大小、时间步长、输入尺寸)
。这就是为什么正确的规范是input\u-shape=(20,1)
或batch\u-input\u-shape=(10000,20,1)
。另外,您的训练数组也应该重新调整,以表示每个步骤都有20
时间步和1
输入功能
因此,解决方案是:
X_-train=np.扩展_-dims(X_-train,2)#使其成为(10000,20,1)
...
模型=顺序()
添加(LSTM(…,input_shape=(20,1)))
你说的是input\u shape=(无,20,64)
但是你的输入只有两个维度(10000,20)
?@AndreHolzner我曾经尝试设置input\u shape=(10000,20),但运气不好。错误为ValueError:检查输入时出错:预期lstm_28_输入为3维,但得到了形状为(10000,20)的数组。请尝试设置输入_形状=(无,20,1)
,并将输入大小调整为(10000,20,1)
。例如,如果您的输入在numpy数组中,请使用@AndreHolzner刚刚尝试过。获得了一个训练np.array,大小为(10000,20,1)。但是,仍然存在一个错误,表示维度不匹配。然后我将输入大小更改为(20,1),现在可以工作了!亲爱的先生,我送你很多爱。