0

几天来我一直在寻找这个问题的答案,但我在互联网上找不到的任何东西似乎都特别适用于我遇到的错误:

ValueError: Error when checking target: expected dense_1 to have shape (1, 300) but got array with shape (1, 60)

这是我正在使用的模型:

model = keras.Sequential([
keras.layers.Conv1D(5,input_shape=(1,60), kernel_size=12, padding='same'), 
keras.layers.Conv1D(10, padding='same',activation=tf.nn.relu, kernel_size=10),
keras.layers.Conv1D(20, padding='same',activation=tf.nn.relu, kernel_size=6),
keras.layers.Conv1D(30, padding='same',activation=tf.nn.relu, kernel_size=5),
keras.layers.Dense(70, activation=tf.nn.relu),
keras.layers.Dense(300,activation="tanh")
]) 
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='mse',
metrics=['mae'])

我能够拥有网络训练的唯一方法是将输出层中的节点数(在本例中为错误消息中的dense_1)设置为等于 60,即我的模型为其输入输入的值的数量。

我还通过一个完全连接的模型运行了这些数据,其中出现了相同的结果,如果输出中的节点数不是 60 个,则会出错。

我尝试通过在 tensorflow 网站上运行 mnist 时尚分类示例来查看是否是我的 tensorflow 版本或 python 版本引起了问题,但是这运行没有错误,并且训练良好。

然后我用 mnist 时尚示例中使用的模型替换了我的模型,除了将输入形状更改为 (60,) 因为我的数据是一维的,我得到了相同的确切错误:

ValueError: Error when checking target: expected dense_1 to have shape (10,) but got array with shape (60,)

除了这一次它显示出对输入形状的轻微改变,因为第一个错误发生在一个输入有 Conv1D 的模型中。

所有这一切让我相信错误存在于我的数据中,因为我非常有信心这不是我的模型的错误,因为它发生在多个不同的模型中。

4

1 回答 1

2

您需要添加Flatten图层,以便将图层中的数据Conv1D展平到 forDense图层。

model = keras.Sequential([
keras.layers.Conv1D(5,input_shape=(1,60), kernel_size=12, padding='same'), 
keras.layers.Conv1D(10, padding='same',activation=tf.nn.relu, kernel_size=10),
keras.layers.Conv1D(20, padding='same',activation=tf.nn.relu, kernel_size=6),
keras.layers.Conv1D(30, padding='same',activation=tf.nn.relu, kernel_size=5),
keras.layers.Flatten(), # This layer should be added
keras.layers.Dense(70, activation=tf.nn.relu),
keras.layers.Dense(300,activation="tanh")
]) 
model.compile(optimizer=tf.train.AdamOptimizer(0.001),
loss='mse',
metrics=['mae'])
于 2018-12-07T02:45:34.357 回答