【问题标题】:How to use color images for Tensorflow image classification?如何使用彩色图像进行 Tensorflow 图像分类?
【发布时间】:2019-04-13 03:44:26
【问题描述】:

我正在关注使用 Fashion MNIST 数据集的 Tensorflow image classification 教程。每张图片都是一张 28x28 的灰度图:

train_images[0].shape
(28, 28)

...在本教程的后面部分将其归一化并将其馈送到 Flatten 层。

train_images = train_images / 255.0
# ...
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax)
])

我有一个使用 matplotlib 导入的彩色 PNG 数据集,其形状为:

(400, 400, 3)

鉴于图像 (28,28) 与 (400, 400, 3) 的不同形状,我如何调整分类器以使用它...而不转换为灰度?

【问题讨论】:

  • 你需要改成keras.layers.Flatten(input_shape=(400, 400,3))

标签: python tensorflow keras


【解决方案1】:

一个小例子:

model = keras.Sequential([
keras.layers.Flatten(input_shape=(400, 400, 3)),
keras.layers.Conv2D(32,kernel_size=3,strides=(1,1),activation='relu', padding='same'),
keras.layers.Conv2D(32,kernel_size=3,strides=(2,2),activation='relu', padding='same'),
keras.layers.Conv2D(64,kernel_size=3,strides=(1,1),activation='relu', padding='same'),
keras.layers.Conv2D(64,kernel_size=3,strides=(2,2),activation='relu', padding='same'),
keras.layers.Conv2D(128,kernel_size=3,strides=(1,1),activation='relu', padding='same'),
keras.layers.Conv2D(128,kernel_size=3,strides=(2,2),activation='relu', padding='same'),
keras.layers.Conv2D(256,kernel_size=3,strides=(1,1),activation='relu', padding='same'),
keras.layers.Conv2D(256,kernel_size=3,strides=(2,2),activation='relu', padding='same'),
keras.layers.GlobalAveragePooling2D(),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)

])

或者你可以使用keras.applications的预训练模型:

from keras.applications.resnet50 import ResNet50
base_model = ResNet50(weights='imagenet',include_top=False,input_shape=(400,400,3)) 
x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(10,activation='softmax')(x)
model=Model(base_model.input,x)

【讨论】:

  • 我不需要先以某种方式规范化数据?喜欢图片/255.0?
  • 当然,就像你的标准化方法是可以的。因为每个通道的像素值在 [0, 255]。
  • 这是否意味着,对于彩色图像,我们需要先将它们展平,然后再应用卷积层?但是它会是一个暗淡的 480000x1 的向量,那么 conv 层(大小为 3x3 的过滤器)将如何工作?另外,padding = 'same' 表示没有填充?
  • 我是初学者,我在每个卷积层之后都看到了最大池化层。在所有卷积层之后仅用一个“GlobalAveragePooling2D 层”替换所有最大池化层的直觉是什么?
猜你喜欢
  • 1970-01-01
  • 2019-01-17
  • 2018-07-23
  • 2016-04-19
  • 2018-03-07
  • 1970-01-01
  • 2020-02-09
  • 2019-08-07
  • 2017-05-23
相关资源
最近更新 更多