【问题标题】:keras sparse_categorical_crossentropy loss function output shape didn't matchkeras sparse_categorical_crossentropy 损失函数输出形状不匹配
【发布时间】:2017-12-16 06:24:24
【问题描述】:

我有一个包含 3570 个标签的数据集。当我使用sparse_categorical_crossentropy 作为损失函数时,输出形状不匹配。

model = Sequential()
model.add(Dense(1024, input_dim=79, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(3570, activation='sigmoid'))

model.compile(loss='sparse_categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.fit(x_train, y_train,
          epochs=10,
          batch_size=1,
          validation_data=(x_valid, y_valid))

输出是 ValueError: Error when checking model target: expected dense_42 to have shape (None, 1) but got array with shape (1055, 3570)

然后我找到这个issue#2444 并使用np.expand_dims(y, -1) 更改代码。但是还是有错误。

model = Sequential()
model.add(Dense(1024, input_dim=79, activation='relu'))
model.add(Dense(2048, activation='relu'))
model.add(Dense(3570, activation='sigmoid'))

model.compile(loss='sparse_categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])
model.fit(x_train, np.expand_dims(y_train, -1),
          epochs=10,
          batch_size=1,
          validation_data=(x_valid, np.expand_dims(y_valid, -1)))

错误 ValueError: Error when checking model target: expected dense_45 to have 2 dimensions, but got array with shape (1055, 3570, 1)

我应该如何更改代码?

【问题讨论】:

    标签: python keras loss-function


    【解决方案1】:

    loss='sparse_categorical_crossentropy' 不是用于单热编码,而是用于整数目标。您可能需要一个“Dense(...”作为输出层并直接使用 y_train。

    【讨论】:

      【解决方案2】:

      原始的 y_train 尺寸是多少?

      您的 y_train 最有可能的形状是 (1055,)。您需要将 One-Hot 代码 y_train 编码为 (1055,3570) 维度。然后原始代码应该可以工作。 Keras 不接受使用多个类的单列 y,它必须是 One-Hot 编码的。

      您可以找到使用以下内容:

      from keras.utils.np_utils import to_categorical
      
      y_cat = to_categorical(y, num_classes=None)
      

      【讨论】:

      • 原来的 y_train 维度已经是 (1055,3570) 而不是 (1055,)。
      • 你能把最后一层的激活函数改成“softmax”吗?
      猜你喜欢
      • 1970-01-01
      • 2020-10-07
      • 2017-12-01
      • 1970-01-01
      • 2021-07-23
      • 1970-01-01
      • 2020-04-28
      • 2018-11-04
      • 2021-05-23
      相关资源
      最近更新 更多