keras mnist实例
相信准备入坑机器学习的朋友们,大多数刚开始看着众多的数学公式,会有种想放弃的挫败感!至少我是这样的。坚持下来,找到适合的方式,相信很快你也会写出自己机器学习的 helloworld!入坑指南 提取密码:5s0u
keras简介
是一个高层神经网络API,简易和快速的原型设计。好处在于可以很快地实现网络模型的搭建,数据输入输出也很方便,不像tf那样各种编码解码才能输入数据,让用户专注于网络模型本身,而不是花大量时间去学tf那些构建图的各种编程套路。mnist
MNIST数据库可从此页面获得,其中包含60,000个示例的训练集以及10,000个示例的测试集。 它是NIST提供的更大集合的子集。 这些数字已经过尺寸标准化并以固定尺寸的图像为中心。
里面分别是训练图,训练标签,测试图,测试标签。将其下载下来。dome
import gzip
import os
import struct
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
from tensorflow.examples.tutorials.mnist import input_data
if __name__ == '__main__':
model1 = Sequential() # 顺序模型
model.add(Dense(input_dim=28 * 28, output_dim=500))
model.add(Activation('sigmoid'))
model.add(Dense(output_dim=500))
model.add(Activation('sigmoid'))
model.add(Dense(output_dim=10))
model.add(Activation('softmax'))
# 这里我们选择交叉熵损失函数
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.1), metrics=['accuracy'])
#选择你下载的包路径
mnist = input_data.read_data_sets("/Users/dongsheng/Downloads/mnist/", one_hot=True)
x_train, y_train = mnist.train.images, mnist.train.labels
x_test, y_test = mnist.test.images, mnist.test.labels
# x_train = x_train.reshape(-1, 784).astype('float32')
# x_test = x_test.reshape(-1, 784).astype('float32')
model.fit(x_train, y_train, batch_size=100, nb_epoch=20)
loss_and_metrics = model1.evaluate(x_test, y_test)
为什么选择 交叉熵
运行效果
采坑
1.网上很多例子使用直接使用X_train
,官网的快速入门就是如此。是因为可以通过联网获取。不过这种方式受到网络限制,或者是load超时。大多数玩家都是不行的。我们理解X_train怎么来的就好。
(X_train, y_train), (X_test, y_test) = mnist.load_data()
2.expected activation_3 to have shape (10,) but got array with shape (1,)
因为读取文件的方式问题,或者是有些修改变量类型。列如:x_train = x_train.reshape(-1, 28,28,1).astype('float32')
这样也是报错的。不过修改为
x_train = x_train.reshape(-1, 784).astype('float32')
又不会报错了。