机器学习训练营最近的作业都是使用Keras,所以最近去翻了下文档,这里记录一下学习栗子。(官网有中文文档)
不多BB,直接上代码,注释已经写得很清楚了。
#!/usr/bin/env python # -*- coding: utf-8 -*- import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout from keras.optimizers import RMSprop batch_size = 128 # 每个梯度更新的样本数 num_classes = 10 # 类的总数 epochs = 20 # 迭代次数 # load the MNIST dataset # 初次运行会先下载文件 (x_train, y_train), (x_test, y_test) = mnist.load_data() x_train = x_train.reshape(60000, 784) x_test = x_test.reshape(10000, 784) x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test sample') # 类向量到二元类矩阵的转换 y_train = keras.utils.to_categorical(y_train, num_classes) y_test = keras.utils.to_categorical(y_test, num_classes) # Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是 Sequential 顺序模型,它由多个网络层线性堆叠。 model = Sequential() # 可以简单地使用 .add() 来堆叠模型: # activation: 激活函数, relu: 线性修正单元, softmax 激活函数 model.add(Dense(512, activation='relu', input_shape=(784,))) model.add(Dropout(0.2)) model.add(Dense(512, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(num_classes, activation='softmax')) model.summary() # 在完成了模型的构建后, 可以使用 .compile() 来配置学习过程 model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy']) # x_train 和 y_train 是 Numpy 数组 -- 就像在 Scikit-Learn API 中一样。 history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, # 日志显示模式 validation_data=(x_test, y_test)) # 验证数据 # 评估模型性能 score = model.evaluate(x_test, y_test, verbose=0) print('Test loss: ', score[0]) print('Test accuracy: ', score[1]) # 对新的数据生成预测 classes = model.predict(x_test, batch_size=128)
下面是部分输出
Using TensorFlow backend. 60000 train samples 10000 test sample _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 512) 401920 _________________________________________________________________ dropout_1 (Dropout) (None, 512) 0 _________________________________________________________________ dense_2 (Dense) (None, 512) 262656 _________________________________________________________________ dropout_2 (Dropout) (None, 512) 0 _________________________________________________________________ dense_3 (Dense) (None, 10) 5130 ================================================================= Total params: 669,706 Trainable params: 669,706 Non-trainable params: 0 _________________________________________________________________ Train on 60000 samples, validate on 10000 samples Epoch 1/20 ### Test loss: 0.11462802259046188 Test accuracy: 0.9826
对数据训练20次得到的结果,准确率高达98.26%,还是挺6的。
但是在运行模型中,这台13年的Mac CPU直接转满,处理器是2.4 GHz Intel Core i5,感觉好吃力,果然深度学习配置要求高啊。
如果代码看不清楚,可以去阅读原文中看。