【问题标题】:Loading one dimensional data into a Dense layer in a sequential Keras model将一维数据加载到顺序 Keras 模型中的密集层
【发布时间】:2017-02-20 14:14:36
【问题描述】:

我有一个训练模型的结果,在 numpy 输出文件中以 Flatten 层结束。 我尝试加载它们并将它们用作 Dense 层的输入。

train_data = np.load(open('bottleneck_flat_features_train.npy'))
train_labels = np.array([0] * (nb_train_samples / 2) + [1] * (nb_train_samples / 2))
#
validation_data = np.load(open('bottleneck_flat_features_validation.npy'))
validation_labels = np.array([0] * (nb_validation_samples / 2) + [1] * (nb_validation_samples / 2))
#
top_m  = Sequential()
top_m.add(Dense(2,input_shape=train_data.shape[1:], activation='sigmoid', name='top_dense1'))
top_m.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
#
top_m.fit(train_data, train_labels,
    nb_epoch=nb_epoch, batch_size=my_batch_size,
    validation_data=(validation_data, validation_labels))

但是我收到以下错误消息:

    ValueError: Error when checking model target: expected top_dense1 to have
 shape (None, 2) but got array with shape (13, 1)

我的输入尺寸是 (16,1536) - 16 张图片用于这个有限的试运行,1536 个特征。

>>> train_data.shape
(16, 1536)

密集层应该是一个 1536 长的一维数组。

>>> train_data.shape[1]
1536

我该怎么办? 非常感谢!

【问题讨论】:

  • 什么是 train_data.shape ?
  • 好点,我在我的问题中添加了该信息。

标签: python numpy keras


【解决方案1】:

你不想编译和拟合 top_m 而不是模型吗?

【讨论】:

  • 错误已更改为 ValueError: Error when checks model target: expected top_dense1 to have shape (None, 2) but got array with shape (13, 1) 如更正问题中所述。跨度>
【解决方案2】:

我发现了我的问题 - 我没有正确定义标签。我已将模型编译切换为稀疏分类交叉熵模式。

我当前的代码是

def train_top_model():
    train_data = np.load(open('bottleneck_flat_features_train.npy'))
    train_labels = np.array([0] * (nb_train_samples / 2) + [1] * (nb_train_samples / 2))
#
    validation_data = np.load(open('bottleneck_flat_features_validation.npy'))
    validation_labels = np.array([0] * (nb_validation_samples / 2) + [1] * (nb_validation_samples / 2))
#
    top_m  = Sequential()
    top_m.add(Dense(2,input_shape=train_data.shape[1:], activation='softmax', name='top_dense1'))
    top_m.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
#
    top_m.fit(train_data, train_labels,
    nb_epoch=nb_epoch, batch_size=my_batch_size,
    validation_data=(validation_data, validation_labels))

现在它可以工作并收敛。

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    相关资源
    最近更新 更多