使用Keras重塑数据以进行深度学习


10

我是Keras的初学者,我从MNIST示例开始,以了解库的实际工作方式。Keras示例文件夹中MNIST问题的代码段为:

import numpy as np
np.random.seed(1337)  # for reproducibility

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten  
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils

batch_size = 128
nb_classes = 10
nb_epoch = 12

# input image dimensions
img_rows, img_cols = 28, 28
# number of convolutional filters to use
nb_filters = 32
# size of pooling area for max pooling
nb_pool = 2
# convolution kernel size
nb_conv = 3

# the data, shuffled and split between train and test sets
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(X_train.shape[0], 1, img_rows, img_cols)
X_test = X_test.reshape(X_test.shape[0], 1, img_rows, img_cols)
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
..........

我无法理解此处的重塑功能。它在做什么,为什么我们要应用它?

Answers:


8

mnist.load_data()为MNIST数字提供结构,(nb_samples, 28, 28)即每个示例2维,代表28x28灰度图像。

但是,Keras中的Convolution2D图层被设计为每个示例可使用3维。它们具有4维输入和输出。这涵盖了彩色图像(nb_samples, nb_channels, width, height),但更重要的是,它涵盖了网络的更深层次,每个示例都已成为一组功能图,即(nb_samples, nb_features, width, height)

用于MNIST数字输入的灰度图像可能需要不同的CNN图层设计(或图层构造函数的参数以接受不同的形状),或者该设计可以简单地使用标准CNN,并且您必须将示例明确表示为1通道图片。Keras团队选择了后一种方法,需要重新设计。


您能否解释一下代码中使用的“ np.random.seed(1337)”背后的逻辑?为什么是1337?
enterML

2
对于脚本而言,除了可重复性之外,没有什么特别的关于1337的内容。优良作法是播种RNG,以便您可以在其他场合再次重复成功的工作。对于黑客来说,这个数字有点开玩笑-urbandictionary.com/define.php?term=1337
Neil Slater
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.