【问题标题】:Keras model ValueError: Can not squeeze dim[1], expected a dimension of 1, got 90Keras 模型 ValueError:无法挤压 dim[1],预期维度为 1,得到 90
【发布时间】:2021-02-25 23:14:59
【问题描述】:

我目前的模型是:

# from tensorflow.keras.layers import InputLayer
model_training = Sequential()
# input_layer = keras.Input(shape=(300,1))
model_training.add(InputLayer(input_shape=(300,1)))
model_training.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='tanh'))
model_training.add(Dropout(0.2))
model_training.add(MaxPooling1D(pool_size=3))
model_training.add(Dropout(0.2))
model_training.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='tanh'))
model_training.add(Dropout(0.2))
model_training.add(MaxPooling1D(pool_size=3))
# model_training.add(Dropout(0.2))
# model_training.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='tanh'))
# model_training.add(Dropout(0.2))
# model_training.add(MaxPooling1D(pool_size=3))
# model_training.add(Dropout(0.2))
# model_training.add(Conv1D(filters=32, kernel_size=3, padding='same', activation='tanh'))
# model_training.add(Dropout(0.2))
# model_training.add(MaxPooling1D(pool_size=3))
# model_training.add(Dropout(0.2))
#model.add(Dropout(0.2))
model_training.add(Flatten())
model_training.add(Dense(90))
model_training.add(Activation('sigmoid'))
model_training.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model_training.summary())

我的拟合函数:

model_training.fit(train_data, train_labels, validation_data=(test_data, test_labels), batch_size=32, epochs=15)

我在运行时收到此错误:

ValueError: Can not squeeze dim[1], expected a dimension of 1, got 90 for '{{node Squeeze}} = Squeeze[T=DT_FLOAT, squeeze_dims=[-1]](remove_squeezable_dimensions/Squeeze)' with input shapes: [?,90].

有什么想法吗? 我的输出层有 90 个,因为总共有 90 个类可以进行预测。

火车和标签的形状如下:

(7769, 300, 1)
(7769, 90, 1)

我无法弄清楚这个问题。任何帮助表示赞赏! 部分模型总结:

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    在训练之前挤压你的标签:

    train_labels = tf.squeeze(train_labels, axis=-1)
    

    标签的形状似乎是问题所在。该模型将输出(batch, 90) 的形状,但您提供的是(batch, 90, 1)。 Keras 无法压缩维度 1,因为它的长度是 90 而不是 1。

    【讨论】:

    • 这行得通。我挤压了 train_labels 和 test_labels 并且它起作用了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多