我正在使用MNIST时尚数据集来尝试解决这个问题。我正在使用链接中的数据:
培训: http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz
训练集标签: http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.gz
测试集图像 http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-images-idx3-ubyte.gz
测试集标签 http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/t10k-labels-idx1-ubyte.gz
我使用代码打开数据集:
def load_mnist(path, kind='train'):
import os
import gzip
import numpy as np
"""Load MNIST data from `path`"""
labels_path = os.path.join(path,
'%s-labels-idx1-ubyte.gz'
% kind)
images_path = os.path.join(path,
'%s-images-idx3-ubyte.gz'
% kind)
with gzip.open(labels_path, 'rb') as lbpath:
labels = np.frombuffer(lbpath.read(), dtype=np.uint8,
offset=8)
with gzip.open(images_path, 'rb') as imgpath:
images = np.frombuffer(imgpath.read(), dtype=np.uint8,
offset=16).reshape(len(labels), 784)
return images, labels
label = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt',
'Sneaker', 'Bag', 'Ankle boot']
data_dir = './'
X_train, y_train = load_mnist('D:\book', kind='train')
X_test, y_test = load_mnist('D:\book', kind='t10k')
X_train = X_train.astype(np.float32) / 256.0
X_test = X_test.astype(np.float32) / 256.0
我正在尝试构建具有以下架构的卷积神经网络:
我的代码是:
X_train = X_train.reshape([60000, 28, 28, 1])
X_train = X_train.astype('float32') / 255.0
X_test = X_test.reshape([10000, 28, 28, 1])
X_test = X_test.astype('float32') / 255.0
model = Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=[28,28,1]))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.summary()
y_train = keras.utils.np_utils.to_categorical(y_train)
y_test = keras.utils.np_utils.to_categorical(y_test)
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X_train, y_train, epochs=100)
但是执行需要很多时间。大约每个纪元30分钟。我想我的代码做错了什么。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
我要强调的几点:
在加载mnist数据集后查看代码中的以下行:
X_train = X_train.astype(np.float32) / 256.0
X_test = X_test.astype(np.float32) / 256.0
为什么要除以256.0
?图像中的像素数据范围为0-255。因此,应将其除以255.0
以将其归一化为0-1范围。
在对数据进行一次归一化之后,便再次对其进行归一化。检查以下代码:
X_train = X_train.reshape([60000, 28, 28, 1])
X_train = X_train.astype('float32') / 255.0
X_test = X_test.reshape([10000, 28, 28, 1])
X_test = X_test.astype('float32') / 255.0
在这里,重塑后,您将再次对其进行规范化。没有必要。多次标准化数据可能会减慢网络训练时的收敛速度。
您没有在batch_size
函数内传递model.fit
值。根据文档here
如果未指定,batch_size将默认为32。
这可能是花费更多时间执行的原因。尝试将batch_size
增加到100、200等,然后检查执行时间。
60000x28x28
训练数据不是一个小的数据集。