【问题标题】:Array mismatch in Keras classifier model output layerKeras 分类器模型输出层中的数组不匹配
【发布时间】:2021-03-21 18:59:27
【问题描述】:

我正在设计一个分类器,它在输入处接受 10 个值 - 信号(通过处理 MNIST 数据集的像素,标准化 0-1 获得),并输出数字类别。 10 值信号对于每个数字都是唯一的,因此可以进行分类。

num_classes=10
y_train=to_categorical(y_train,num_classes)
y_test=to_categorical(y_test,num_classes)


x_train=(60000,10,1,1)
y_train=(60000,10)
x_test=(10000,10,1,1)
y_test=(10000,10)

代码如下

input_img = Input(shape=(10,1,1))
x = Flatten()(input_img)
x = Dense(100, activation='relu')(x)
x = Dense(100, activation='relu')(x)
decoded = Dense(10, activation='softmax')(x)


autoencoder=Model(input_img,decoded)

autoencoder.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])

history=autoencoder.fit(x_train, y_train,
                epochs=30,
                batch_size=32, 
                verbose=1,
                shuffle=True,
                validation_data=(x_test, y_test))

请建议可以进行哪些更改。

【问题讨论】:

  • y_train 在适合之前有什么形状? y_train=(60000,10)这个?或者你把这个发给y_train = to_categorical(y_train, num_classes),然后喂到合适的位置?
  • y_train 在应用 to_cat 后具有形状 (60000,10) 并发送到 fit
  • 这可能是你使用了错误的损失函数。当您制作 one-hot 编码向量时,请使用 categorical_cross_entropy 损失函数。

标签: python-3.x tensorflow machine-learning keras neural-network


【解决方案1】:

我认为您可能应该使用tf.keras.losses.CategoricalCrossentropy 损失函数,因为您使用to_categorical 将目标编码为一个热向量。根据doc

当有两个或多个标签类别时,使用此交叉熵损失函数。我们希望以 one_hot 表示形式提供标签。如果您想提供整数形式的标签,请使用SparseCategoricalCrossentropy loss。

但是,IMO,没有可复现的代码,给出一个具体的答案真的很雄心勃勃。

【讨论】:

  • 感谢您的帮助,该程序确实有效,但似乎是一个培训问题。我提供了 x_test 和 x_train 文件的链接,并且 y_train y_test 可以由我发布的可重现代码获取和处理。你能建议缺少什么
  • 训练损失在增加,从原始帖子中的跟踪可以看出
  • 如果您当前的问题得到解决,最好提出一个新问题。因为你在解决当前问题后可能会遇到一个新问题,这也是你之前问题的一个新问题。讨论不会得出结论。
猜你喜欢
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 1970-01-01
  • 2017-05-25
  • 2020-10-10
  • 2020-12-20
相关资源
最近更新 更多