• tensorflow学习——03 卷积


    Fashion MNIST的数据集都是灰度图像,并且图像都在正中间

     

    如果让Fashion MNIST训练的神经网络模型去判断一张图片,其中的鞋子并不是在正中间,那么判断的准确率就不是很好了

     

    CNN:卷积神经网络

     

    识别物品的特征

     

    不同的过滤器会产生不同的效果

     

    每次卷积之后还要进行一个max Pooling(最大值池化),作用是增强图像特征

    取一个2*2的区域,把最大值留下

     

    池化与卷积的不同是:池化作用域不重合区域

    经过max pooling 500*500的变成了250*250,这是因为一个2*2的区域只保留一个最大值

     

    关于卷积神经网络可以看下面图片中的材料

    卷积神经网络是在全连接神经网络上增加四层

     

     

    import tensorflow as tf
    from tensorflow import keras
    fashion_mnist=keras.datasets.fashion_mnist
    (train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
    
    #第一层是两维的卷积层 64指过滤器(filter)有64个,每个过滤器是3*3像素;激活函数relu;输入值是28*28*1,表明只有灰度值
    #第二层 卷积之后使用maxPooling增强图像特征 使用2*2区域  原来的输出会少一半
    #第三层也是卷积层和第一层一样
    #第四层和第二层也一样 并且不用再指定输入的shape
    
    model=keras.Sequential()
    model.add(keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)))
    model.add(keras.layers.MaxPooling2D(2,2))
    model.add(keras.layers.Conv2D(64,(3,3),activation='relu'))
    model.add(keras.layers.MaxPooling2D(2,2))
    model.add(keras.layers.Flatten())
    model.add(keras.layers.Dense(128,activation=tf.nn.relu))
    model.add(keras.layers.Dense(10,activation=tf.nn.softmax))
    train_images = train_images.reshape((60000, 28, 28, 1))
    train_images_scaled=train_images/255
    model.compile(optimizer=tf.optimizers.Adam(),loss=tf.losses.sparse_categorical_crossentropy,metrics=['accuracy'])
    model.fit(train_images_scaled,train_labels,epochs=5)

     模型的网络结构

    model.summary()

     out_shape

    第一层:原先输入是28*28,卷积之后去掉两个像素变成26*26  6464个过滤器

    经过第一层卷积之后,一张图片变成了64张图片

    第二层:池化之后 长宽减半 13*13

    第三层:卷积,长宽-2  11*11

    第四层:池化减半 5*5

    第五层:Flatten把所有展平,5*5*64=1600个神经元,

     

    param

    第一层:过滤器是3*3  所以(3*3+1*64=640  1是一个bias

    第二层没有调整参数

    第三层:(3*3*64+1*64=36928

     

     

    import matplotlib.pyplot as plt
    layer_outputs=[layer.output for layer in model.layers]  #读取model的每一层
    activation_model=tf.keras.models.Model(inputs=model.input,outputs=layer_outputs) #input和输出层放在一起构成一个对象
    pred=activation_model.predict(test_images[0].reshape(1,28,28,1)) #用上面的独享预测图片
    print(len(pred))#输出为7  说明是7个层的输出
    #print(pred)
    #之前用64个过滤器 不同的过滤器提取不同的特征
    print(pred[0].shape) #(1,26,26,64) 这个是第一层的输出结果的shape
    plt.imshow(pred[0][0,:,:,1]) #这个是第一层的第二个过滤器产生的结果图像

     

    有的过滤器可能是对鞋子的底面,有的可能就是对鞋子的鞋面产生明显效果

     

     


    作者:孙建钊
    出处:http://www.cnblogs.com/sunjianzhao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    跨域问题----CORS
    java设计模式--简单工厂模式
    vue+java后台通信报403,cors解决跨域问题(该贴说的不是很清楚,不过大概如此,可再去网上查相关内容)
    CMake实践(2)
    CMake实践(1)
    Centos6.5下编译安装ACE6.0
    回调函数的应用误区4(c/s OK版本回调小程序)
    回调函数的应用误区3(大彻大悟的回调小程序,例子的解释相当给力)
    回调函数的应用误区2(与原理相悖的回调函数)
    回调函数的应用误区1(原汁原味的函数指针应用)
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/15408717.html
Copyright © 2020-2023  润新知