数据挖掘算法和实践(十四):kaggle上搭建卷积神经网络(CNN)实现fashion_MNIST

卷积神经网络 CNN(Convolutional Neural Network)是一种前馈型的神经网络,通过卷积运算识别图像边缘和纹理,再通过不断的卷积提取出抽象的特征,最终实现图像识别,其在大型图像处理方面有出色的表现,广泛应用到图像分类、定位等领域中,相比于其他神经网络结构,卷积神经网络需要的参数相对较少,被广泛应用。

目录

 CNN网络的一般架构

CNN实现fashion_MNIST分类


 CNN网络的一般架构

卷积层完成数据的边缘和纹理分析,提取图像特征,假如使用3×3的卷积核对图像进行处理,9个像素点会被转换成1个像素点,非线性变换层即是神经元的激活层,设定神经元传递阈值,池化层是降采样的过程,把图像的像素点变小,全连接层是线性变换层,把有用的特征提取输出,卷积层+非线性变换层+池化层是将图像变小变厚的过程

卷积层三个重要参数:ksize,strides,padding,分别是卷积核的大小(一般是3*3或者5*5的方阵),卷积核移动的跨度,卷积的边缘处理规则,在notebook中使用shift+tab键查看tensorflow.keras.layers.Cov2d()函数的参数:

Init signature:
tf.keras.layers.Conv2D(
    filters,
    kernel_size,
    strides=(1, 1),
    padding='valid',
    data_format=None,
    dilation_rate=(1, 1),
    activation=None,
    use_bias=True,
    kernel_initializer='glorot_uniform',
    bias_initializer='zeros',
    kernel_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    bias_constraint=None,
    **kwargs,
)

池化层是一个降采样操作,使得图像变小,有最大化池化,有平均池化等,最大化池化使用MaxPooling2D()函数,函数的参数如下:

Init signature:
tf.keras.layers.MaxPooling2D(
    pool_size=(2, 2),
    strides=None,
    padding='valid',
    data_format=None,
    **kwargs,
)

CNN实现fashion_MNIST分类

一般cpu无法完成CNN网络计算,这里使用kaggle提供的GPU搭建CNN网络实现fashion_MNIST的分类模型,kaggle是一个数据竞赛平台,里面包含了很多数据挖掘和深度学习的实例和解答方法,是一个极佳的学习平台:https://www.kaggle.com/notebooks/welcome,创建一个notebook,选择GPU加速:

确认开启GPU加速:

卷积神经网络的输入图像是4维,分别是batch个数,图像的长,图像的高,通道数;

import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

(train_image,train_lable),(test_image,test_lable)=tf.keras.datasets.fashion_mnist.load_data()
train_image.shape

# 将图像维度扩张到4维数据
train_images=np.expand_dims(train_image,-1)
test_images=np.expand_dims(test_image,-1)
train_images.shape

model=tf.keras.Sequential([tf.keras.layers.Conv2D(32,(3,3),input_shape=train_images.shape[1:],activation="relu"),
           tf.keras.layers.Dropout(0.5),
           tf.keras.layers.MaxPooling2D(),
           tf.keras.layers.Conv2D(32,(3,3),activation="relu"),
           tf.keras.layers.Dropout(0.5),
           tf.keras.layers.GlobalMaxPooling2D(),
           tf.keras.layers.Dense(10,activation="softmax")
])
model.summary()


model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=["acc"])

history=model.fit(train_images,
                  train_lable,
                  epochs=5,
                  validation_data=(test_images,test_lable)
                 )
model.evaluate(test_images,test_lable)
#plt.plot(history.epoch,history.history.get('loss'))
plt.plot(history.epoch,history.history.get('acc'))

可以看出这个神经网络的构造和参数个数:

准确率作图:

猜你喜欢

转载自blog.csdn.net/yezonggang/article/details/106496413