如何解决我正在用 python 学习 tensorflow2,我想知道是什么设置了 ndim?
# map function
def area_triangle(b,h):
area = b*h/2
return area
lists = [[4,5],[2,3],[11,45]]
list(map(area_triangle,lists))
然后当我尝试在构建它后运行 model.fit 时。那是错误被抛出的时候。这是正在构建的模型和 model.fit 函数的代码片段。
def build_model(layers):
model = Sequential()
# By setting return_sequences to True we are able to stack another LSTM layer
model.add(LSTM(layers[0],input_shape=(1,2),return_sequences=True))
model.add(LSTM(layers[0],return_sequences=False))
model.add(Dropout(0.2))
model.add(Activation("linear"))
start = time.time()
model.compile(loss="mse",optimizer="rmsprop",metrics=['accuracy'])
print("Compile Time : ",time.time() - start)
return model
这是错误信息。 ValueError:层“顺序”的输入 0 与层不兼容:预期 ndim=3,发现 ndim=2。什么是 ndim?它的值对模型有何调整?我如何理解我设置的 ndim。
window = 20
print("X_train",X_train.shape)
print("y_train",y_train.shape)
print("X_test",X_test.shape)
print("y_test",y_test.shape)
model = build_model([1374,window,100,1])
model.fit(X_train,y_train,batch_size=3,epochs=5,validation_split=0.1,verbose=0).
这是打印出来的形状。
ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=3,found ndim=2. Full shape received: (None,2).
解决方法
正如@yudhiesh 所建议的,LSTM 期望输入形状为 [batch,timesteps,feature]
的形状 3D 张量
我可以重现您的问题
import tensorflow as tf
inputs = tf.random.normal([32,8])
lstm = tf.keras.layers.LSTM(4)
output = lstm(inputs)
print(output.shape)
输出
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-2-160c5e8d5d9a> in <module>()
2 inputs = tf.random.normal([32,8])
3 lstm = tf.keras.layers.LSTM(4)
----> 4 output = lstm(inputs)
5 print(output.shape)
2 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/input_spec.py in assert_input_compatibility(input_spec,inputs,layer_name)
217 'expected ndim=' + str(spec.ndim) + ',found ndim=' +
218 str(ndim) + '. Full shape received: ' +
--> 219 str(tuple(shape)))
220 if spec.max_ndim is not None:
221 ndim = x.shape.rank
ValueError: Input 0 of layer lstm_1 is incompatible with the layer: expected ndim=3,found ndim=2. Full shape received: (32,8)
工作示例代码
inputs = tf.random.normal([32,10,8])
lstm = tf.keras.layers.LSTM(4)
output = lstm(inputs)
print(output.shape)
输出:
(32,4)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。