上次用Matlab写过一个识别Mnist的神经网络,地址在:https://www.cnblogs.com/tiandsp/p/9042908.html

这次又用Keras做了一个差不多的,毕竟,现在最流行的项目都是Python做的,我也跟一下潮流:)

数据是从本地解析好的图像和标签载入的。

神经网络有两个隐含层,都有512个节点。

import numpy as np
from keras.preprocessing import image
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation


# 从文件夹图像与标签文件载入数据
def create_x(filenum, file_dir):
    train_x = []
    for i in range(filenum):
        img = image.load_img(file_dir + str(i) + ".bmp", target_size=(28, 28))
        img = img.convert('L')
        x = image.img_to_array(img)
        train_x.append(x)
    train_x = np.array(train_x)
    train_x = train_x.astype('float32')
    train_x /= 255
    return train_x


def create_y(classes, filename):
    train_y = []
    file = open(filename, "r")
    for line in file.readlines():
        tmp = []
        for j in range(classes):
            if j == int(line):
                tmp.append(1)
            else:
                tmp.append(0)
        train_y.append(tmp)
    file.close()
    train_y = np.array(train_y).astype('float32')
    return train_y


classes = 10
X_train = create_x(55000, './train/')
X_test = create_x(10000, './test/')

X_train = X_train.reshape(X_train.shape[0], 784)
X_test = X_test.reshape(X_test.shape[0], 784)

Y_train = create_y(classes, 'train.txt')
Y_test = create_y(classes, 'test.txt')

# 从网络下载的数据集直接解析数据
'''
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/", 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.astype('float32')
X_test = X_test.astype('float32')
X_train = X_train.reshape(55000, 784)
X_test = X_test.reshape(10000, 784)
'''
model = Sequential()

model.add(Dense(512, input_shape=(784,)))
model.add(Activation('relu'))
model.add(Dropout(0.4))

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.4))

model.add(Dense(10))
model.add(Activation('softmax'))
model.summary()

model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
history = model.fit(X_train, Y_train, batch_size=500, epochs=20, verbose=1, validation_data=(X_test, Y_test))
score = model.evaluate(X_test, Y_test, verbose=0)

test_result = model.predict(X_test)
result = np.argmax(test_result, axis = 1)

print(result)
print('Test score:', score[0])
print('Test accuracy:', score[1])

更多相关文章

  1. 如何在序列化后从查询中更新json数据?
  2. 腾讯应用宝采集数据分析
  3. 机器学习Python数据特征选定
  4. Python3 基本数据类型
  5. 《数据结构与算法Python语言描述》裘宗燕 笔记 第五章 栈和队列
  6. python--数据库支持
  7. Python数据格式化
  8. Python数据分析相关资料
  9. Python学习笔记(3):数据集操作-列的统一操作

随机推荐

  1. Error inflating class android.support.
  2. Android 复制到剪贴板
  3. Android中findViewById返回为空null的快
  4. Android Studio打包cordova项目过程中遇
  5. eclipse创建android项目,无法正常预览布局
  6. android之ION内存管理器(1)-- 简介
  7. android:ellipsize
  8. [置顶] Android编译系统详解(一)
  9. Android让所有应用都竖屏显示或者横屏显
  10. unity 与 android 协调工作 注意事项