如何在R的Keras包中对MNIST图像进行数据增强?
问题:MNIST灰度图像数据增强的维度与效果异常
本人熟练使用R,但深度学习完全零基础。参考Chollet等人所著《Deep Learning with R》(第二版)中的两段代码:一段是MNIST数据集的CNN模型代码(第221页及以后),另一段是图像数据增强代码(第241页及以后)。由于后者使用的Kaggle猫狗数据集需注册获取,遂尝试用MNIST替代进行数据增强。
遇到的核心问题:
- MNIST为灰度图像,猫狗数据集是彩色图像,不确定这是否是导致问题的关键
- 代码常因维度不匹配报错;若能运行,图像增强效果也完全异常:部分图像高宽混淆,部分图像相互重叠,旋转数字“5”得到的并非旋转后的“5”,各种变换的表现均不符合预期
以下是本人的尝试代码:
初始数据与增强层定义
library(keras) mnist <- dataset_mnist() images = mnist$train$x mnist$train$y[1:2] # 5 0 - 前两张图像对应的数字 data_augmentation <- keras_model_sequential() %>% # 注释/取消注释可单独测试每种变换 # layer_random_flip("horizontal") # 实际是垂直翻转数字“5”,而非水平翻转 # layer_random_flip("vertical") # 无变化,显示错误图像(混杂“5”和“0”) layer_random_rotation(0.1) # 完全打乱图像(疑似合并“5”和“0”?) # layer_random_zoom(0.2) # 仅垂直方向放大 # layer_random_brightness(0.2) # 效果正常? # layer_random_contrast(0.2) # 效果正常? # layer_random_height(0.2) # 图像重叠 # layer_random_width(0.2) # 调整的是高度而非宽度 # layer_random_translation(0.2,0.2) # 仅垂直方向偏移,且图像重叠(混杂“5”和“0”)
尝试4D张量格式
images = mnist$train$x %>% array_reshape(c(60000, 28, 28, 1)) # 修改order参数为"C"或"F"均无帮助 par(mfrow = c(3, 3), mar = rep(.5, 4)) image <- images[1, , , ] plot(as.raster(as.array(image), max = 255)) for (i in 2:9) { augmented_images <- data_augmentation(images[1:2, , , ]) # 仅聚焦“5”和“0”两张图 # augmented_image <- augmented_images[1, , , ] # 维度错误 augmented_image <- augmented_images[1, , ] # 必须取3D而非4D,原因不明 plot(as.raster(as.array(augmented_image), max = 255)) }
尝试3D张量格式
images = mnist$train$x %>% array_reshape(c(60000, 28, 28)) # 修改order参数为"C"或"F"均无帮助 par(mfrow = c(3, 3), mar = rep(.5, 4)) image <- images[1, , ] plot(as.raster(as.array(image), max = 255)) for (i in 2:9) { augmented_images <- data_augmentation(images[1:2, , ]) # 仅聚焦“5”和“0”两张图 augmented_image <- augmented_images[1, , ] # 仍需取3D,逻辑矛盾 plot(as.raster(as.array(augmented_image), max = 255)) }
当代码未因维度错误崩溃时,图像增强效果完全不符合预期,例如旋转数字“5”无法得到正常旋转后的“5”。
内容的提问来源于stack exchange,提问作者user29466667
相关产品推荐
相关产品推荐

