日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

深度学习之基于LeNet-5实现cifar10的识别

發(fā)布時(shí)間:2023/12/15 pytorch 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深度学习之基于LeNet-5实现cifar10的识别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Cifar10是一個(gè)封裝好的數(shù)據(jù)集,里面包括10中類別的事物。而LeNet-5是最先提出來的卷積神經(jīng)網(wǎng)絡(luò),在之前的學(xué)習(xí)中,我們并沒有利用LeNet-5網(wǎng)絡(luò)進(jìn)行分類,本次實(shí)驗(yàn)我們來看一下基于Lenet-5對cifar10分類的效果。

1.導(dǎo)入庫

import tensorflow as tf import numpy as np import os,PIL import matplotlib.pyplot as plt from tensorflow import keras from tensorflow.keras import datasets,layers,models

2.數(shù)據(jù)處理

(train_images,train_labels),(test_images,test_labels) = tf.keras.datasets.cifar10.load_data() train_images = train_images / 255.0 test_images = test_images / 255.0#歸一化all_labels_name = ['airplane', 'automobile', 'bird', 'cat', 'deer','dog', 'frog', 'horse', 'ship', 'truck'] train_db = tf.data.Dataset.from_tensor_slices((train_images,train_labels)) train_db = train_db.shuffle(1000).batch(batch_sizes) test_db = tf.data.Dataset.from_tensor_slices((test_images,test_labels)) test_db = test_db.batch(batch_sizes)

參數(shù)設(shè)置

batch_sizes = 128 epochs = 50

數(shù)據(jù)如下所示:

3.LeNet-5

經(jīng)典到不能再經(jīng)典的圖片

model = tf.keras.Sequential([tf.keras.layers.Conv2D(6,5,input_shape=(32,32,3)),# 使用6個(gè)5*5的卷積核對單通道32*32的圖片進(jìn)行卷積,結(jié)果得到6個(gè)28*28的特征圖tf.keras.layers.MaxPool2D(pool_size=2,strides=2), # 對28*28的特征圖進(jìn)行2*2最大池化,得到14*14的特征圖tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(16,5),# 使用16個(gè)5*5的卷積核對6通道14*14的圖片進(jìn)行卷積,結(jié)果得到16個(gè)10*10的特征圖tf.keras.layers.MaxPool2D(pool_size=2,strides=2),# 對10*10的特征圖進(jìn)行2*2最大池化,得到5*5的特征圖tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(120,5),# 使用120個(gè)5*5的卷積核對16通道5*5的圖片進(jìn)行卷積,結(jié)果得到120個(gè)1*1的特征圖tf.keras.layers.ReLU(),#tf.keras.layers.Dropout(0.5),tf.keras.layers.Flatten(),## 將 (None, 1, 1, 120) 的下采樣圖片拉伸成 (None, 120) 的形狀tf.keras.layers.Dense(84,activation='relu'),tf.keras.layers.Dense(10,activation='softmax') ])

網(wǎng)絡(luò)編譯&&訓(xùn)練

model.compile(optimizer= "adam",loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy']) history = model.fit(train_db,validation_data=test_db,epochs=epochs )

實(shí)驗(yàn)結(jié)果可視化:

實(shí)驗(yàn)的準(zhǔn)確率不高,在60%左右,而且模型的過擬合現(xiàn)象比較嚴(yán)重。因?yàn)槭堑谝淮窠?jīng)網(wǎng)絡(luò),有這樣的不足很正常。
在原始的LeNet-5網(wǎng)絡(luò)下加入Dropout層

model = tf.keras.Sequential([tf.keras.layers.Conv2D(6,5,input_shape=(32,32,3)),tf.keras.layers.MaxPool2D(pool_size=2,strides=2),tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(16,5),tf.keras.layers.MaxPool2D(pool_size=2,strides=2),tf.keras.layers.ReLU(),tf.keras.layers.Conv2D(120,5),tf.keras.layers.ReLU(),tf.keras.layers.Dropout(0.5),tf.keras.layers.Flatten(),tf.keras.layers.Dense(84,activation='relu'),tf.keras.layers.Dense(10,activation='softmax') ])

實(shí)驗(yàn)結(jié)果可視化:

過擬合問題得到了解決,但是模型的準(zhǔn)確率還是比較低。
自己搭建CNN網(wǎng)絡(luò)

model = tf.keras.Sequential([tf.keras.layers.Conv2D(16,3,padding="same",activation="relu",input_shape=(32,32,3)),tf.keras.layers.MaxPool2D(),tf.keras.layers.Conv2D(32,3,padding="same",activation="relu"),tf.keras.layers.MaxPool2D(),tf.keras.layers.Conv2D(64,3,padding="same",activation="relu"),tf.keras.layers.MaxPool2D(),tf.keras.layers.Dropout(0.5),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512,activation="relu"),tf.keras.layers.Dense(10,activation="softmax") ])

實(shí)驗(yàn)結(jié)果可視化:

過擬合問題得到了改善,模型的準(zhǔn)確率得到了提高。

總結(jié):LeNet-5網(wǎng)絡(luò)對于Cifar10的模型準(zhǔn)確率比較低,而且過擬合現(xiàn)象比較嚴(yán)重。在LeNet-5網(wǎng)絡(luò)中加入Dropout層后,過擬合現(xiàn)象得到了改善,但是模型的準(zhǔn)確率還是比較低。博主將epochs由50增加到了100,準(zhǔn)確率沒有得到提升。由此證明,單純的增加epochs的次數(shù),并不能很好的改善模型的準(zhǔn)確率。利用自己搭建的CNN網(wǎng)絡(luò),由于網(wǎng)絡(luò)的層數(shù)增加,模型的準(zhǔn)確率得到了提高。

總結(jié)

以上是生活随笔為你收集整理的深度学习之基于LeNet-5实现cifar10的识别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。