CNN卷积神经网络模型预测Fashion数据Tensorflow代码


前言

CNN卷积神经网络,Fashion是数据集,Tensorflow代码


一、CNN是什么

前一篇深度学习中已经介绍了,这里就不再多介绍了。

二、代码

1.引入库

代码如下(示例):

import datetime
import tensorflow as tf
from sklearn.metrics import precision_score
import matplotlib.pyplot as plt
import numpy as np

2.读入数据

代码如下(示例):

fashion = tf.keras.datasets.fashion_mnist
(X_train,Y_train),(X_test,Y_test) = fashion.load_data()

该处数据是用自带的数据集


2.1数据预处理

将图片数据。转换为向量格式。n(图片数量),h,w,rgb(颜色通道数)黑白就是1,这里n = -1,可以自动计算图片的数量,或则n = x_train.shape()相同的效果

# 数据预处理
# 最开始的-1,是会自动计算样本个数
X_train = X_train.reshape([-1,28,28,1]) / 255.0
X_test = X_test.reshape([-1,28,28,1]) / 255.0

2.2查看数据

# 查看数据
plt.figure(figsize = (6,6))
for i in range(9):
    plt.subplot(3,3,i+1)
    plt.grid(False)# 去除网格线
    # cmap设置图片格式,gray是图像灰色
    plt.imshow(X_train[i],cmap='gray')
plt.show()

3模型搭建

上一篇手写数字数据集,已经简单讲解了模型结构。这里不同的点是tf.keras.layers.Dropout(0.1)
Dropout的作用是,随机让每层0.1比例的神经元不进行操作,避免神经元太多,网络太深而速度很慢。

# 模型搭建
model = tf.keras.models.Sequential([
    
    tf.keras.layers.Conv2D(filters = 32,kernel_size = (5,5),
         activation = tf.nn.relu ,input_shape=(28,28,1)),
    tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(units = 128,activation = tf.nn.relu),
    tf.keras.layers.Dense(units = 10,activation = 'softmax')
    
])
model.summary()

模型结构

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 conv2d_4 (Conv2D)           (None, 24, 24, 32)        832       
                                                                 
 max_pooling2d_4 (MaxPooling  (None, 12, 12, 32)       0         
 2D)                                                             
                                                                 
 dropout_4 (Dropout)         (None, 12, 12, 32)        0         
                                                                 
 flatten_2 (Flatten)         (None, 4608)              0         
                                                                 
 dense (Dense)               (None, 128)               589952    
                                                                 
 dense_1 (Dense)             (None, 10)                1290      
                                                                 
=================================================================
Total params: 592,074
Trainable params: 592,074
Non-trainable params: 0

3设置学习率和优化器

# 优化器
learning_rate = 0.001  #学习率
adam_optimizer = tf.keras.optimizers.Adam(learning_rate)
# 编译模型
model.compile(optimizer=adam_optimizer,
                loss=tf.keras.losses.sparse_categorical_crossentropy,
                    metrics=['accuracy'])

4训练模型

# 模型开始训练时间
start_time = datetime.datetime.now()

# 训练模型
num_epochs = 20  # 训练次数
batch_size = 128  # 批大小

model.fit(x=X_train, y=Y_train, batch_size=batch_size, epochs=num_epochs)

# 模型结束训练,记录训练时间
end_time = datetime.datetime.now()
time_cost = end_time - start_time

4.1准确率查看

在这里插入图片描述

查看训练结构

import random
Fashion_dict = {0:'T恤',1:'裤子',2:'套衫',3:'裙子',4:'外套',5:'凉鞋',
                6:'汗衫',7:'运动鞋',8:'包',9:'踝靴'}
# 进行预测
image_index = random.randint(1,100)  # 选一张图片
pred = model.predict(X_test[image_index].reshape(1,28,28,1))
print(Fashion_dict[pred.argmax()])  # 打印出预测值
plt.figure(figsize = (1.5,1.5))
#plt.figure(figsize = (6,6))
plt.imshow(X_test[image_index].reshape(28,28), cmap='Greys')
plt.show()

在这里插入图片描述

测试集准确率

scores = model.evaluate(X_test, Y_test, verbose=0)
print("使用CNN网络的正确率为:" ,'%.2f' %(scores[1]*100) , "%")

使用CNN网络的正确率为: 91.55 %

总结

以上就是CNN卷积神经网络模型预测Fashion数据集的代码。谢谢大家。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于图像处理方面的神经网络模型,用于图像分类、目标检测、图像分割等多个领域。与传统神经网络中的全连接层不同,CNN通过对数据进行卷积、池化等处理,从而提取出图像中的特征信息,同时减少了网络中参数的数量,降低了过拟合的风险。 如果要将CNN应用于一维信号的处理,可以通过将输入数据进行卷积操作,提取出信号中的特征信息。具体的流程可以分为以下几个步骤: 1.数据准备:准备一组有标签的信号数据集,其中包括输入信号和相应的标签(分类或回归)。 2.卷积层:利用卷积核对输入信号进行卷积操作,提取出特定的特征。卷积核的个数可以由用户指定,根据不同的需求来调整。 3.激活函数:对卷积后的特征进行非线性映射,增加网络的非线性表达能力。通常使用ReLU(Rectified Linear Unit)激活函数。 4.池化层:通过在卷积层输出结果上进行滑动窗口操作,取窗口内的最大值或平均值,减小信号的大小,并保留其主要特征信息。 5.全连接层:将池化层输出结果展平成一维向量,通过全连接神经网络进行分类或回归。 Python语言是一种方便使用CNN模型的程序语言,常用的深度学习框架包括TensorFlow、Keras、PyTorch等。对于一维信号数据的处理,可以使用TensorFlow框架中的keras.layers.Conv1D进行卷积操作,keras.layers.MaxPooling1D进行池化操作,keras.layers.Dense进行全连接操作。代码实现如下: import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers # 读取数据集 (x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_data() # 数据预处理 x_train = x_train.reshape(-1, 28, 28).astype("float32") / 255.0 x_test = x_test.reshape(-1, 28, 28).astype("float32") / 255.0 y_train = keras.utils.to_categorical(y_train, num_classes=10) y_test = keras.utils.to_categorical(y_test, num_classes=10) # 搭建模型 model = keras.Sequential( [ layers.Conv1D(filters=32, kernel_size=3, activation="relu", input_shape=(28, 28)), layers.MaxPooling1D(pool_size=2), layers.Flatten(), layers.Dense(units=10, activation="softmax") ] ) # 编译模型 model.compile(optimizer=keras.optimizers.Adam(), loss=keras.losses.CategoricalCrossentropy(from_logits=True), metrics=["accuracy"]) # 训练模型 history = model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.2) # 评估模型 model.evaluate(x_test, y_test, verbose=2) 总之,使用CNN进行一维信号的处理可以有效提取数据的特征并分类或回归,Python语言的深度学习框架提供了相应的工具与函数,可以快速搭建并训练模型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值