【问题标题】:Tensorflow/Keras: model's output layer expects different input shape than what it recievedTensorflow/Keras:模型输出层期望的输入形状与其接收的形状不同
【发布时间】:2018-12-07 10:45:34
【问题描述】:

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

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 的模型中。

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

【问题讨论】:

    标签: python tensorflow machine-learning keras


    【解决方案1】:

    您需要添加Flatten 层,以便将来自Conv1D 层的数据展平为Dense 层。

    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'])
    

    【讨论】:

    • 添加此内容后,我遇到了另一个类似的错误:预期 dense_1 有 2 个维度,但得到了形状为 (482, 1, 60) 的数组。同样正如我在帖子中所说,它也发生在只有密集层的模型中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2019-01-22
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多