zoukankan      html  css  js  c++  java
  • Keras实现卷积神经网络

     1 # -*- coding: utf-8 -*-
     2 """
     3 Created on Sun Jan 20 11:25:29 2019
     4 
     5 @author: zhen
     6 """
     7 
     8 import numpy as np
     9 from keras.datasets import mnist
    10 from keras.models import Sequential
    11 from keras.layers import Dense
    12 from keras.layers import Dropout
    13 from keras.layers import Flatten
    14 from keras.layers.convolutional import Conv2D
    15 from keras.layers.convolutional import MaxPooling2D
    16 
    17 # 加载数据
    18 (x_train, y_train), (x_test, y_test) = mnist.load_data("../test_data_home")
    19 # 转化训练数据为四维张量形式
    20 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype("float32")
    21 x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype("float32")
    22 # 归一化
    23 x_train /= 255
    24 x_test /= 255
    25 
    26 #转化为one hot 编码
    27 def to_one_hot(y):
    28     y_one_hot = np.zeros(10) # 生成全零向量
    29     y_one_hot[y] = 1
    30     return y_one_hot
    31 
    32 # 重置标签
    33 y_train_one_hot = np.array([to_one_hot(y_train[i]) for i in range(len(y_train))])
    34 y_test_one_hot = np.array([to_one_hot(y_test[i]) for i in range(len(y_test))])
    35 # 搭建卷积神经网络
    36 model = Sequential()
    37 model.add(Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', input_shape=(28, 28, 1), 
    38                  activation='relu'))
    39 # 添加最大池化层
    40 model.add(MaxPooling2D(pool_size=(2, 2)))
    41 # 添加Dropout层
    42 model.add(Dropout(0.2))
    43 # 构建深度网络
    44 model.add(Conv2D(64, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu'))
    45 model.add(MaxPooling2D(pool_size=(2, 2)))
    46 model.add(Dropout(0.2))
    47 model.add(Conv2D(128, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu'))
    48 model.add(MaxPooling2D(pool_size=(2, 2)))
    49 model.add(Dropout(0.2))
    50 # 展开
    51 model.add(Flatten())
    52 # 构造全连接层
    53 model.add(Dense(128, activation='relu'))
    54 model.add(Dense(64, activation='relu'))
    55 model.add(Dense(32, activation='relu'))
    56 model.add(Dense(10, activation='softmax'))
    57 # 定义损失函数
    58 model.compile(loss='categorical_crossentropy', optimizer='adagrad',
    59               metrics=['accuracy'])
    60 # 训练
    61 model.fit(x_train, y_train_one_hot, validation_data=(x_test, y_test_one_hot),
    62           epochs=2, batch_size=128)
    63 # 评估
    64 # verbose : 0表示不显示数据,1表示显示进度
    65 scores = model.evaluate(x_test, y_test_one_hot, verbose=0)
    66 print(scores)

    结果:

  • 相关阅读:
    最长不下降子序列 从O(n)到O(nlogn)
    【NOIP1999】【洛谷P1020】导弹拦截
    【NOI2001】【洛谷P2024】食物链
    【2017中国大学生程序设计竞赛
    【2017中国大学生程序设计竞赛
    【NOIP】【洛谷P1029】最大公约数和最小公倍数问题
    【NOIP2009】【洛谷P1072】Hankson 的趣味题
    C++模板(2)
    Java中跳出循环的方法
    localeCompare() 方法实现中文的拼音排序
  • 原文地址:https://www.cnblogs.com/yszd/p/10294536.html
Copyright © 2011-2022 走看看