我正在 Keras 中尝试一个简单的模型,我想将其作为输入,大小为 5x3 的矩阵。在下面的示例中,这是在添加第一个密集层时使用 input_shape=(5, 3)
指定的。
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import Adam
import numpy as np
model = Sequential()
model.add(Dense(32, input_shape=(5, 3)))
model.add(Activation('relu'))
model.add(Dense(32))
model.add(Activation('relu'))
model.add(Dense(4))
adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=adam)
x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
y = model.predict(x)
但是,当我运行代码时,model.predict()
函数给出以下错误:
ValueError: Error when checking : expected dense_input_1 to have 3 dimensions, but got array with shape (5, 3)
但我不明白这个错误。 x 的形状是 (5, 3),这正是我告诉第一个密集层期望的输入。为什么它需要三个维度?看起来这可能与batch size有关,但我认为input_shape
只是指网络的形状,与batch size无关......
最佳答案
问题出在这里:
model.add(Dense(32, input_shape=(5, 3)))
应该是:
model.add(Dense(32, input_shape=(3,)))
第一个示例维度不包含在input_shape
中。还因为它实际上取决于网络拟合期间设置的batch_size
。如果你想指定你可以尝试:
model.add(Dense(32, batch_input_shape=(5, 3)))
编辑:
从您的评论中我了解到您希望您的输入具有 shape=(5,3)
在这种情况下您需要:
通过设置
reshape
您的x
:x = x.reshape((1, 5, 3))
其中第一个维度来自示例。
您需要在某个阶段
展平
您的模型。这是因为如果没有它,您将通过网络传递2d
输入。我建议您执行以下操作:model = Sequential() model.add(Dense(32, input_shape=(5, 3))) model.add(Activation('relu')) model.add(Dense(32)) model.add(Activation('relu')) model.add(Flatten()) model.add(Dense(4))
关于tensorflow - Keras错误: expected dense_input_1 to have 3 dimensions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233169/