带有 MNIST 样本数据的简单 keras 自动编码器不起作用

Posted

技术标签:

【中文标题】带有 MNIST 样本数据的简单 keras 自动编码器不起作用【英文标题】:Simple keras autoencoder with MNIST sample data not working 【发布时间】:2019-01-02 06:12:49 【问题描述】:

我正在尝试使用 MNIST 示例数据集在 R 中实现一个简单的 keras autoencoder。我从博客中得到了我的例子,但它不起作用。我几乎得到了0 % 的准确度。

目标是将每个28 x 28 图像(784 个条目)压缩成一个包含 32 个条目的向量:

这是我的代码:

library(keras)
mnist <- dataset_mnist()
x_train <- mnist$train$x

# reshape
x_train <- array_reshape(x_train, c(nrow(x_train), 784))
x_train <- x_train / 255

model <- keras_model_sequential() 
model %>% 
 layer_dense(units = 32, activation = 'relu', input_shape = c(784)) %>% 
 layer_dense(units=784, activation='sigmoid')

model %>% compile(
  loss = 'categorical_crossentropy',
  optimizer = 'adam',
  metrics = c('accuracy')
)

history <- model %>% fit(
  x_train, x_train, 
  epochs = 15, batch_size = 128, 
  validation_split = 0.2
)

【问题讨论】:

【参考方案1】:

您想在这里使用binary_crossentropy 作为损失函数。 categorical_crossentropy 适用于多类分类问题(只有一个输出为 1),binary_crossentropy 适用于多标签分类。

【讨论】:

谢谢,我让它运行了,但还有一个问题。我将输入数据从图像更改为具有正值和负值的随机矩阵。解码后的输出只有正值。知道为什么会这样吗?似乎自动编码器只想要图像(即具有正值的矩阵) 一个sigmoid函数的输出总是在0到1之间。

以上是关于带有 MNIST 样本数据的简单 keras 自动编码器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MNIST 训练的网络用我自己的样本进行了测试

keras神经网络开发知识笔记

python中Keras下载mnist数据集

深度学习笔记:基于Keras库的MNIST手写数字识别

Tensorflow.keras:RNN 对 Mnist 进行分类

基于Keras 的VGG16神经网络模型的Mnist数据集识别并使用GPU加速