使用tf.keras搭建CNN卷积神经网络识别Fashionmnist数据集

使用tf.keras搭建CNN卷积神经网络识别Fashionmnist数据集。

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

#加载fishion mnist数据集
(train_image,train_lable),(test_image,test_lable)=tf.keras.datasets.fashion_mnist.load_data()

#原始数据--train
print('train_image的形状:\r\n',train_image.shape)
print('train_lable的形状:\r\n',train_lable.shape)
#原始数据--test
print('test_image的形状:\r\n',test_image.shape)
print('test_lable的形状:\r\n',test_lable.shape)

#之前多层感知器,对于数据的预处理是 把图0片进行扁平化(把图片变成一维的数组)
#而,卷积神经网络需要的是一个图片数据(实际上是一个四维的图片)--(num,height,width,channel通道数)
train_image=np.expand_dims(train_image,-1)#进行扩张维度
print('train_image_4的形状:\r\n',train_image.shape)

test_image=np.expand_dims(test_image,-1)#进行扩张维度
print('train_image_4的形状:\r\n',test_image.shape)

#建立模型:
model=tf.keras.Sequential()#顺序模型
#添加一个卷积层:(第一层非常的关键,第一层一定要是卷积层)
model.add(tf.keras.layers.Conv2D(64,
                                 (3,3),
                                 input_shape=(28,28,1),
                                 activation='relu',
                                 padding='same'))
model.add(tf.keras.layers.Conv2D(64,
                                 (3,3),
                                 activation='relu',
                                 padding='same'))

#添加一个池化层 #使得卷积层的视野在不断扩大
model.add(tf.keras.layers.MaxPool2D()) #Maxpool2D之后的 height和width都会变成原来的一半
#过拟合:
model.add(tf.keras.layers.Dropout(0.5))
#再添加一个卷积层
model.add(tf.keras.layers.Conv2D(128, (3,3), activation='relu',padding='same'))
model.add(tf.keras.layers.Conv2D(128, (3,3), activation='relu',padding='same'))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.5))

#再添加一个卷积层
model.add(tf.keras.layers.Conv2D(256, (3,3), activation='relu',padding='same'))
model.add(tf.keras.layers.Conv2D(256, (3,3), activation='relu',padding='same'))
model.add(tf.keras.layers.MaxPool2D())
model.add(tf.keras.layers.Dropout(0.5))

#再添加一个卷积层
model.add(tf.keras.layers.Conv2D(512, (3,3), activation='relu',padding='same'))
model.add(tf.keras.layers.Conv2D(512, (3,3), activation='relu',padding='same'))
model.add(tf.keras.layers.Dropout(0.5))

#全局的平均池化:
model.add(tf.keras.layers.GlobalAveragePooling2D())#将原来的四维-变成二维

#dense层接收的是一个二维的数据:
model.add(tf.keras.layers.Dense(256,activation='relu'))
#dense层接收的是一个二维的数据:
model.add(tf.keras.layers.Dense(10,activation='softmax'))

model.summary()

#编译
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc']
              )

#训练
print('训练:\r\n')
history=model.fit(train_image,train_lable,epochs=20,validation_data=(test_image,test_lable))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值