Kar*_*rus 10 machine-learning neural-network deep-learning keras tensorflow
我在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)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行代码时,该model.predict()函数给出以下错误:
ValueError:检查时出错:预期dense_input_1有3个维度,但得到的数组有形状(5,3)
但我不明白这个错误.形状x是(5,3),这正是我所说的第一个密集层期望作为输入.为什么它期待三个维度?看来这可能与批量大小有关,但我认为这input_shape仅仅是指网络的形状,与批量大小无关......
Mar*_*jko 12
问题在于:
model.add(Dense(32, input_shape=(5, 3)))
Run Code Online (Sandbox Code Playgroud)
它应该是:
model.add(Dense(32, input_shape=(3,)))
Run Code Online (Sandbox Code Playgroud)
第一个示例维度未包含在内input_shape.还因为它实际上取决于batch_size网络拟合期间的设置.如果您想指定,您可以尝试:
model.add(Dense(32, batch_input_shape=(5, 3)))
Run Code Online (Sandbox Code Playgroud)
编辑:
从您的评论我明白,您希望您的输入shape=(5,3)在这种情况下您需要:
reshape你x的设置:
x = x.reshape((1, 5, 3))
Run Code Online (Sandbox Code Playgroud)
其中第一个维度来自示例.
flatten在某个阶段你需要你的模型.这是因为没有它你将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))
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
10652 次 |
| 最近记录: |