zoukankan      html  css  js  c++  java
  • 5.1 卷积神经网络简介

    5-1 实例化一个小型的卷积神经网络

    from keras import layers
    from keras import models
    
    Using TensorFlow backend.
    
    model = models.Sequential()
    model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape = (28, 28, 1)))
    model.add(layers.MaxPooling2D((2,2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2,2)))
    model.add(layers.Conv2D(64, (3, 3), activation='relu'))
    
    model.summary()
    
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    conv2d_1 (Conv2D)            (None, 26, 26, 32)        320       
    _________________________________________________________________
    max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32)        0         
    _________________________________________________________________
    conv2d_2 (Conv2D)            (None, 11, 11, 64)        18496     
    _________________________________________________________________
    max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64)          0         
    _________________________________________________________________
    conv2d_3 (Conv2D)            (None, 3, 3, 64)          36928     
    =================================================================
    Total params: 55,744
    Trainable params: 55,744
    Non-trainable params: 0
    _________________________________________________________________
    

    5-2 在卷积神经网络上添加分类器

    # 将3D输出展平为1D
    model.add(layers.Flatten())
    
    # 贴加两个全连接层
    model.add(layers.Dense(64, activation='relu'))
    model.add(layers.Dense(10, activation='softmax'))
    
    model.summary()
    
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    conv2d_1 (Conv2D)            (None, 26, 26, 32)        320       
    _________________________________________________________________
    max_pooling2d_1 (MaxPooling2 (None, 13, 13, 32)        0         
    _________________________________________________________________
    conv2d_2 (Conv2D)            (None, 11, 11, 64)        18496     
    _________________________________________________________________
    max_pooling2d_2 (MaxPooling2 (None, 5, 5, 64)          0         
    _________________________________________________________________
    conv2d_3 (Conv2D)            (None, 3, 3, 64)          36928     
    _________________________________________________________________
    flatten_1 (Flatten)          (None, 576)               0         
    _________________________________________________________________
    dense_1 (Dense)              (None, 64)                36928     
    _________________________________________________________________
    dense_2 (Dense)              (None, 10)                650       
    =================================================================
    Total params: 93,322
    Trainable params: 93,322
    Non-trainable params: 0
    _________________________________________________________________
    

    5-3 在MNIST图像上训练卷积神经网络

    from keras.datasets import mnist
    from keras.utils import to_categorical
    
    (train_images, train_labels), (test_images, test_labels) = mnist.load_data()
    
    train_images = train_images.reshape((60000, 28, 28, 1))
    train_images = train_images.astype('float32') / 255
    

    探究下数据集

    import matplotlib.pyplot as plt
    %matplotlib inline
    
    img = train_images[0]
    img.shape
    
    (28, 28, 1)
    
    img = img.reshape((28, 28))
    img.shape
    
    (28, 28)
    
    plt.imshow(img, cmap='Greys', interpolation=None)
    
    <matplotlib.image.AxesImage at 0x1386036a0>
    

    train_labels[0]
    
    5
    

    可以看见显示的第一张图片和标签都是5

    train_images = train_images.astype('float32') / 255
    
    test_images = test_images.reshape((10000, 28, 28, 1))
    test_images = test_images.astype('float32') / 255
    
    # to_categorical用于one-hot编码
    train_labels = to_categorical(train_labels)
    test_labels = to_categorical(test_labels)
    
    # one-hot编码后的效果
    train_labels[0]
    
    array([0., 0., 0., 0., 0., 1., 0., 0., 0., 0.], dtype=float32)
    
    model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
    model.fit(train_images, train_labels, epochs=5, batch_size=64)
    
    Epoch 1/5
    60000/60000 [==============================] - 101s 2ms/step - loss: 0.9779 - acc: 0.6717
    Epoch 2/5
    60000/60000 [==============================] - 104s 2ms/step - loss: 0.2749 - acc: 0.9148
    Epoch 3/5
    60000/60000 [==============================] - 106s 2ms/step - loss: 0.1478 - acc: 0.9539
    Epoch 4/5
    60000/60000 [==============================] - 70s 1ms/step - loss: 0.1037 - acc: 0.9678
    Epoch 5/5
    60000/60000 [==============================] - 47s 791us/step - loss: 0.0811 - acc: 0.9742
    
    
    
    
    
    <keras.callbacks.History at 0x1386cb160>
    
    test_loss, test_acc = model.evaluate(test_images, test_labels)
    
    10000/10000 [==============================] - 4s 372us/step
    
    test_acc
    
    0.9431
  • 相关阅读:
    记一道有趣的数学题
    BJOI2018 二进制
    BJOI2016 IP地址
    BJOI2016 回转寿司
    BJOI2017 开车
    BJOI2019 光线
    java 下载
    springboot 运行相关命令
    sql mapper 里面 Integer 类型判断
    springboot 访问jar同级别下的文件访问问题
  • 原文地址:https://www.cnblogs.com/shayue/p/10387219.html
Copyright © 2011-2022 走看看