【问题标题】:Appropriate dimensions for the MaxPooling layer?MaxPooling 层的适当尺寸?
【发布时间】:2019-01-30 14:06:42
【问题描述】:

我正在尝试在 tensorflow 中创建一个模型来训练 fashion_mnist 数据集。我创建的第一层是 conv2D 层:

keras.layers.Conv2D(
    filters=6, 
    kernel_size=3, 
    strides=1, 
    padding='SAME', 
    input_shape=(28, 28, 1))

现在,我想在此之后添加一个 MaxPooling 层。由于我在 conv 层中使用了 6 个过滤器,所以 conv 层输出本质上不是 3D(2D 图像和层数的额外维度)吗?在这种情况下我应该使用 MaxPooling2D 还是 MaxPooling3D?

编辑:这是我写的代码,它给出了一个错误:Error when checking input: expected conv2d_input to have 4 dimensions, but got array with shape (60000, 28, 28)

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

fashion_mnist = keras.datasets.fashion_mnist
(trainImg, trainLbl), (testImg, testLbl) = fashion_mnist.load_data()

classNames = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']

trainImg = trainImg/255.0
trainLbl = trainLbl/255.0

model = keras.Sequential([
    keras.layers.Conv2D(activation=tf.nn.relu, filters=6, kernel_size=3, strides=1, padding='SAME', input_shape=(28, 28, 1)),
    keras.layers.MaxPooling2D(pool_size=2, strides=2, padding='SAME'),
    keras.layers.Conv2D(activation=tf.nn.relu, filters=12, kernel_size=9, strides=1, padding='SAME'),
    keras.layers.MaxPooling2D(pool_size=2, strides=2, padding='SAME'),
    keras.layers.Flatten(),
    keras.layers.Dense(128, activation=tf.nn.relu),
    keras.layers.Dense(10, activation=tf.nn.softmax),
])

model.compile(optimizer=tf.train.AdamOptimizer(),
             loss='sparse_categorical_crossentropy',
             metrics=['accuracy'])

model.fit(trainImg, trainLbl, epochs=10, batch_size=64)

【问题讨论】:

  • 使用maxpooling2D
  • 你能发布堆栈跟踪吗?这在哪个conv层面临错误?
  • @UpasanaMittal 我用trainImg = np.expand_dims(testImg, axis=3) 重塑了阵列。代码现在运行。我还有其他类型的问题,我在每个时期都获得了 0.100 的准确度,这真的很低而且有点可疑,因为它甚至没有改变一点。不过因为它是一个不同的主题,所以没有在这个线程中添加这个问题。

标签: python tensorflow machine-learning keras mnist


【解决方案1】:

根据我对您问题的理解。您可以使用 MaxPooling2D。你可以使用这样的东西

model.add(keras.layers.Conv2D(filters=6, kernel_size=3, strides=1, padding='SAME', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=(2, 2)))

您可以根据自己的喜好更改pool_size。希望对您有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-22
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 2018-11-12
    • 1970-01-01
    相关资源
    最近更新 更多