• 【Python】keras神经网络识别mnist


    上次用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])

    最终在测试集上识别率在98%左右。

    相关测试数据可以在这里下载到。

  • 相关阅读:
    Python 模块管理
    Python 练习: 计算器
    Linux 系统性能分析工具 sar
    Python 正则介绍
    Python ConfigParser 模块
    Python logging 模块
    Python hashlib 模块
    Python sys 模块
    09 下拉框 数据验证
    08 条件排序
  • 原文地址:https://www.cnblogs.com/tiandsp/p/9635155.html
Copyright © 2020-2023  润新知