国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python與深度學(xué)習(xí)(九):CNN和cifar10

這篇具有很好參考價(jià)值的文章主要介紹了python與深度學(xué)習(xí)(九):CNN和cifar10。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 說明

本篇文章是CNN的另外一個(gè)例子,cifar10,是彩色的十分類數(shù)據(jù)集。
可以搭建卷積神經(jīng)網(wǎng)絡(luò)來訓(xùn)練模型。

2. cifar10實(shí)戰(zhàn)

2.1 導(dǎo)入相關(guān)庫

以下第三方庫是python專門用于深度學(xué)習(xí)的庫

# 導(dǎo)入tensorflow
import tensorflow as tf
# 導(dǎo)入keras
from tensorflow import keras
from keras.datasets import cifar10
# 引入繪制acc和loss曲線的庫
import matplotlib.pyplot as plt
# 引入ANN的必要的類
from keras.layers import Dense, Conv2D, MaxPool2D, Flatten
from keras.models import Sequential
from keras import optimizers, losses
from keras.preprocessing.image import ImageDataGenerator

2.2 加載數(shù)據(jù)

把cifar10數(shù)據(jù)集進(jìn)行加載
x_train是fashion_mnist訓(xùn)練集圖片,大小的32323的,y_train是對(duì)應(yīng)的標(biāo)簽是數(shù)字。
x_test是fashion_mnist測(cè)試集圖片,大小的32323的,y_test是對(duì)應(yīng)的標(biāo)簽是數(shù)字。
因?yàn)閥的形狀是(None,1)的,如果直接進(jìn)行獨(dú)熱編碼會(huì)變成(None,1,10),會(huì)和神經(jīng)網(wǎng)絡(luò)的輸出形狀(None,10)不匹配,因此需要對(duì)獨(dú)熱編碼之前的y的形狀進(jìn)行降維處理變成(None,)。

"1.加載數(shù)據(jù)"
"""
x_train是fashion_mnist訓(xùn)練集圖片,大小的32*32*3的,y_train是對(duì)應(yīng)的標(biāo)簽是數(shù)字
x_test是fashion_mnist測(cè)試集圖片,大小的32*32*3的,y_test是對(duì)應(yīng)的標(biāo)簽是數(shù)字
"""
(x_train, y_train), (x_test, y_test) = cifar10.load_data()  # 加載cifar10數(shù)據(jù)集
print('mnist_data:', x_train.shape, y_train.shape, x_test.shape, y_test.shape)  # 打印訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的形狀
"""
因?yàn)閥的形狀是(None,1)的,如果直接進(jìn)行獨(dú)熱編碼會(huì)變成(None,1,10),會(huì)和神經(jīng)網(wǎng)絡(luò)的輸出形狀(None,10)不匹配,
因此需要對(duì)獨(dú)熱編碼之前的y的形狀進(jìn)行降維處理變成(None,)
"""
y_train = tf.squeeze(y_train, axis=1)
y_test = tf.squeeze(y_test, axis=1)

2.3 數(shù)據(jù)預(yù)處理

(1) 將輸入的圖片進(jìn)行歸一化,從0-255變換到0-1;
(2) 將標(biāo)簽y進(jìn)行獨(dú)熱編碼,因?yàn)樯窠?jīng)網(wǎng)絡(luò)的輸出是10個(gè)概率值,而y是1個(gè)數(shù), 計(jì)算loss時(shí)無法對(duì)應(yīng)計(jì)算,因此將y進(jìn)行獨(dú)立編碼成為10個(gè)數(shù)的行向量,然后進(jìn)行l(wèi)oss的計(jì)算 獨(dú)熱編碼:例如數(shù)值1的10分類的獨(dú)熱編碼是[0 1 0 0 0 0 0 0 0 0,即1的位置為1,其余位置為0。

def preprocess(x, y):  # 數(shù)據(jù)預(yù)處理函數(shù)
    x = tf.cast(x, dtype=tf.float32) / 255.  # 將輸入的圖片進(jìn)行歸一化,從0-255變換到0-1
    y = tf.cast(y, dtype=tf.int32)  # 將輸入圖片的標(biāo)簽轉(zhuǎn)換為int32類型
    y = tf.one_hot(y, depth=10)
    """
    # 將標(biāo)簽y進(jìn)行獨(dú)熱編碼,因?yàn)樯窠?jīng)網(wǎng)絡(luò)的輸出是10個(gè)概率值,而y是1個(gè)數(shù),
    計(jì)算loss時(shí)無法對(duì)應(yīng)計(jì)算,因此將y進(jìn)行獨(dú)立編碼成為10個(gè)數(shù)的行向量,然后進(jìn)行l(wèi)oss的計(jì)算
    獨(dú)熱編碼:例如數(shù)值1的10分類的獨(dú)熱編碼是[0 1 0 0 0 0 0 0 0 0,即1的位置為1,其余位置為0
    """
    return x, y

2.4 數(shù)據(jù)處理

數(shù)據(jù)加載進(jìn)入內(nèi)存后,需要轉(zhuǎn)換成 Dataset 對(duì)象,才能利用 TensorFlow 提供的各種便捷功能。
通過 Dataset.from_tensor_slices 可以將訓(xùn)練部分的數(shù)據(jù)圖片 x 和標(biāo)簽 y 都轉(zhuǎn)換成Dataset 對(duì)象

batchsz = 128  # 每次輸入給神經(jīng)網(wǎng)絡(luò)的圖片數(shù)
"""
數(shù)據(jù)加載進(jìn)入內(nèi)存后,需要轉(zhuǎn)換成 Dataset 對(duì)象,才能利用 TensorFlow 提供的各種便捷功能。
通過 Dataset.from_tensor_slices 可以將訓(xùn)練部分的數(shù)據(jù)圖片 x 和標(biāo)簽 y 都轉(zhuǎn)換成Dataset 對(duì)象
"""
db = tf.data.Dataset.from_tensor_slices((x_train, y_train))  # 構(gòu)建訓(xùn)練集對(duì)象
db = db.map(preprocess).shuffle(60000).batch(batchsz)  # 將數(shù)據(jù)進(jìn)行預(yù)處理,隨機(jī)打散和批量處理
ds_val = tf.data.Dataset.from_tensor_slices((x_test, y_test))  # 構(gòu)建測(cè)試集對(duì)象
ds_val = ds_val.map(preprocess).batch(batchsz)  # 將數(shù)據(jù)進(jìn)行預(yù)處理,隨機(jī)打散和批量處理

2.5 構(gòu)建網(wǎng)絡(luò)模型

構(gòu)建了兩層卷積層,兩層池化層,然后是展平層(將二維特征圖拉直輸入給全連接層),然后是三層全連接層。

"3.構(gòu)建網(wǎng)絡(luò)模型"
model = Sequential([Conv2D(filters=6, kernel_size=(5, 5), activation='relu'),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Conv2D(filters=16, kernel_size=(5, 5), activation='relu'),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Flatten(),
                    Dense(120, activation='relu'),
                    Dense(84, activation='relu'),
                    Dense(10,activation='softmax')])

model.build(input_shape=(None, 32, 32, 3))  # 模型的輸入大小
model.summary()  # 打印網(wǎng)絡(luò)結(jié)構(gòu)

2.6 模型編譯

模型的優(yōu)化器是Adam,另外一種優(yōu)化方法,學(xué)習(xí)率是0.01,
損失函數(shù)是losses.CategoricalCrossentropy,多分類交叉熵,
性能指標(biāo)是正確率accuracy。

"4.模型編譯"
model.compile(optimizer='Adam',
              loss=losses.CategoricalCrossentropy(from_logits=False),
              metrics=['accuracy']
                )
"""
模型的優(yōu)化器是Adam
損失函數(shù)是losses.CategoricalCrossentropy,
性能指標(biāo)是正確率accuracy
"""

2.7 模型訓(xùn)練

模型訓(xùn)練的次數(shù)是20,每1次循環(huán)進(jìn)行測(cè)試

"5.模型訓(xùn)練"
history = model.fit(db, epochs=20, validation_data=ds_val, validation_freq=1)
"""
模型訓(xùn)練的次數(shù)是20,每1次循環(huán)進(jìn)行測(cè)試
"""

2.8 模型保存

以.h5文件格式保存模型

"6.模型保存"
model.save('cnn_cifar10.h5')  # 以.h5文件格式保存模型

2.9 模型評(píng)價(jià)

得到測(cè)試集的正確率

"7.模型評(píng)價(jià)"
model.evaluate(ds_val)  # 得到測(cè)試集的正確率

2.10 模型測(cè)試

對(duì)模型進(jìn)行測(cè)試

"8.模型測(cè)試"
sample = next(iter(ds_val))  # 取一個(gè)batchsz的測(cè)試集數(shù)據(jù)
x = sample[0]  # 測(cè)試集數(shù)據(jù)
y = sample[1]  # 測(cè)試集的標(biāo)簽
pred = model.predict(x)  # 將一個(gè)batchsz的測(cè)試集數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)的結(jié)果
pred = tf.argmax(pred, axis=1)  # 每個(gè)預(yù)測(cè)的結(jié)果的概率最大值的下標(biāo),也就是預(yù)測(cè)的數(shù)字
y = tf.argmax(y, axis=1)  # 每個(gè)標(biāo)簽的最大值對(duì)應(yīng)的下標(biāo),也就是標(biāo)簽對(duì)應(yīng)的數(shù)字
print(pred)  # 打印預(yù)測(cè)結(jié)果
print(y)  # 打印標(biāo)簽類別

2.11 模型訓(xùn)練結(jié)果的可視化

對(duì)模型的訓(xùn)練結(jié)果進(jìn)行可視化

"9.模型訓(xùn)練時(shí)的可視化"
# 顯示訓(xùn)練集和驗(yàn)證集的acc和loss曲線
acc = history.history['accuracy']  # 獲取模型訓(xùn)練中的accuracy
val_acc = history.history['val_accuracy']  # 獲取模型訓(xùn)練中的val_accuracy
loss = history.history['loss']  # 獲取模型訓(xùn)練中的loss
val_loss = history.history['val_loss']  # 獲取模型訓(xùn)練中的val_loss
# 繪值acc曲線
plt.figure(1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
# 繪制loss曲線
plt.figure(2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()  # 將結(jié)果顯示出來

3. cifar10的CNN模型可視化結(jié)果圖

Epoch 1/20
391/391 [==============================] - 20s 44ms/step - loss: 1.7699 - accuracy: 0.3471 - val_loss: 1.5087 - val_accuracy: 0.4547
Epoch 2/20
391/391 [==============================] - 20s 49ms/step - loss: 1.4580 - accuracy: 0.4737 - val_loss: 1.4031 - val_accuracy: 0.4884
Epoch 3/20
391/391 [==============================] - 21s 51ms/step - loss: 1.3519 - accuracy: 0.5168 - val_loss: 1.3040 - val_accuracy: 0.5345
Epoch 4/20
391/391 [==============================] - 21s 51ms/step - loss: 1.2646 - accuracy: 0.5506 - val_loss: 1.2333 - val_accuracy: 0.5646
Epoch 5/20
391/391 [==============================] - 19s 47ms/step - loss: 1.2030 - accuracy: 0.5753 - val_loss: 1.2309 - val_accuracy: 0.5673
Epoch 6/20
391/391 [==============================] - 19s 46ms/step - loss: 1.1519 - accuracy: 0.5941 - val_loss: 1.1947 - val_accuracy: 0.5716
Epoch 7/20
391/391 [==============================] - 18s 44ms/step - loss: 1.1104 - accuracy: 0.6088 - val_loss: 1.1496 - val_accuracy: 0.5987
Epoch 8/20
391/391 [==============================] - 19s 46ms/step - loss: 1.0726 - accuracy: 0.6235 - val_loss: 1.1330 - val_accuracy: 0.6031
Epoch 9/20
391/391 [==============================] - 19s 47ms/step - loss: 1.0393 - accuracy: 0.6327 - val_loss: 1.1079 - val_accuracy: 0.6119
Epoch 10/20
391/391 [==============================] - 21s 51ms/step - loss: 1.0149 - accuracy: 0.6440 - val_loss: 1.1023 - val_accuracy: 0.6160
Epoch 11/20
391/391 [==============================] - 19s 47ms/step - loss: 0.9798 - accuracy: 0.6550 - val_loss: 1.0828 - val_accuracy: 0.6265
Epoch 12/20
391/391 [==============================] - 19s 47ms/step - loss: 0.9594 - accuracy: 0.6621 - val_loss: 1.0978 - val_accuracy: 0.6191
Epoch 13/20
391/391 [==============================] - 18s 44ms/step - loss: 0.9325 - accuracy: 0.6709 - val_loss: 1.0803 - val_accuracy: 0.6264
Epoch 14/20
391/391 [==============================] - 20s 49ms/step - loss: 0.9106 - accuracy: 0.6801 - val_loss: 1.0792 - val_accuracy: 0.6212
Epoch 15/20
391/391 [==============================] - 23s 54ms/step - loss: 0.8928 - accuracy: 0.6873 - val_loss: 1.0586 - val_accuracy: 0.6382
Epoch 16/20
391/391 [==============================] - 20s 50ms/step - loss: 0.8695 - accuracy: 0.6931 - val_loss: 1.0825 - val_accuracy: 0.6303
Epoch 17/20
391/391 [==============================] - 22s 54ms/step - loss: 0.8524 - accuracy: 0.6993 - val_loss: 1.0917 - val_accuracy: 0.6296
Epoch 18/20
391/391 [==============================] - 19s 46ms/step - loss: 0.8314 - accuracy: 0.7074 - val_loss: 1.0753 - val_accuracy: 0.6341
Epoch 19/20
391/391 [==============================] - 19s 48ms/step - loss: 0.8117 - accuracy: 0.7136 - val_loss: 1.0701 - val_accuracy: 0.6376
Epoch 20/20
391/391 [==============================] - 20s 50ms/step - loss: 0.7967 - accuracy: 0.7200 - val_loss: 1.0715 - val_accuracy: 0.6376
79/79 [==============================] - 1s 17ms/step - loss: 1.0715 - accuracy: 0.6376
4/4 [==============================] - 0s 6ms/step

python與深度學(xué)習(xí)(九):CNN和cifar10,python,深度學(xué)習(xí),深度學(xué)習(xí),python
python與深度學(xué)習(xí)(九):CNN和cifar10,python,深度學(xué)習(xí),深度學(xué)習(xí),python
從以上結(jié)果可知,模型的準(zhǔn)確率達(dá)到了63%,太低了,原因是網(wǎng)絡(luò)結(jié)構(gòu)有點(diǎn)簡單,因此進(jìn)行改變網(wǎng)絡(luò)結(jié)構(gòu),同時(shí)為了降低過擬合的影響,加入數(shù)據(jù)增強(qiáng)部分。

4. 完整代碼

# 導(dǎo)入tensorflow
import tensorflow as tf
# 導(dǎo)入keras
from tensorflow import keras
from keras.datasets import cifar10
# 引入繪制acc和loss曲線的庫
import matplotlib.pyplot as plt
# 引入ANN的必要的類
from keras.layers import Dense, Conv2D, MaxPool2D, Flatten
from keras.models import Sequential
from keras import optimizers, losses
from keras.preprocessing.image import ImageDataGenerator
"1.加載數(shù)據(jù)"
"""
x_train是fashion_mnist訓(xùn)練集圖片,大小的32*32*3的,y_train是對(duì)應(yīng)的標(biāo)簽是數(shù)字
x_test是fashion_mnist測(cè)試集圖片,大小的32*32*3的,y_test是對(duì)應(yīng)的標(biāo)簽是數(shù)字
"""
(x_train, y_train), (x_test, y_test) = cifar10.load_data()  # 加載cifar10數(shù)據(jù)集
print('mnist_data:', x_train.shape, y_train.shape, x_test.shape, y_test.shape)  # 打印訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的形狀
"""
因?yàn)閥的形狀是(None,1)的,如果直接進(jìn)行獨(dú)熱編碼會(huì)變成(None,1,10),會(huì)和神經(jīng)網(wǎng)絡(luò)的輸出形狀(None,10)不匹配,
因此需要對(duì)獨(dú)熱編碼之前的y的形狀進(jìn)行降維處理變成(None,)
"""
y_train = tf.squeeze(y_train, axis=1)
y_test = tf.squeeze(y_test, axis=1)
"2.數(shù)據(jù)預(yù)處理"


def preprocess(x, y):  # 數(shù)據(jù)預(yù)處理函數(shù)
    x = tf.cast(x, dtype=tf.float32) / 255.  # 將輸入的圖片進(jìn)行歸一化,從0-255變換到0-1
    y = tf.cast(y, dtype=tf.int32)  # 將輸入圖片的標(biāo)簽轉(zhuǎn)換為int32類型
    y = tf.one_hot(y, depth=10)
    """
    # 將標(biāo)簽y進(jìn)行獨(dú)熱編碼,因?yàn)樯窠?jīng)網(wǎng)絡(luò)的輸出是10個(gè)概率值,而y是1個(gè)數(shù),
    計(jì)算loss時(shí)無法對(duì)應(yīng)計(jì)算,因此將y進(jìn)行獨(dú)立編碼成為10個(gè)數(shù)的行向量,然后進(jìn)行l(wèi)oss的計(jì)算
    獨(dú)熱編碼:例如數(shù)值1的10分類的獨(dú)熱編碼是[0 1 0 0 0 0 0 0 0 0,即1的位置為1,其余位置為0
    """
    return x, y


batchsz = 128  # 每次輸入給神經(jīng)網(wǎng)絡(luò)的圖片數(shù)
"""
數(shù)據(jù)加載進(jìn)入內(nèi)存后,需要轉(zhuǎn)換成 Dataset 對(duì)象,才能利用 TensorFlow 提供的各種便捷功能。
通過 Dataset.from_tensor_slices 可以將訓(xùn)練部分的數(shù)據(jù)圖片 x 和標(biāo)簽 y 都轉(zhuǎn)換成Dataset 對(duì)象
"""
db = tf.data.Dataset.from_tensor_slices((x_train, y_train))  # 構(gòu)建訓(xùn)練集對(duì)象
db = db.map(preprocess).shuffle(60000).batch(batchsz)  # 將數(shù)據(jù)進(jìn)行預(yù)處理,隨機(jī)打散和批量處理
ds_val = tf.data.Dataset.from_tensor_slices((x_test, y_test))  # 構(gòu)建測(cè)試集對(duì)象
ds_val = ds_val.map(preprocess).batch(batchsz)  # 將數(shù)據(jù)進(jìn)行預(yù)處理,隨機(jī)打散和批量處理


"3.構(gòu)建網(wǎng)絡(luò)模型"
model = Sequential([Conv2D(filters=6, kernel_size=(5, 5), activation='relu'),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Conv2D(filters=16, kernel_size=(5, 5), activation='relu'),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Flatten(),
                    Dense(120, activation='relu'),
                    Dense(84, activation='relu'),
                    Dense(10,activation='softmax')])

model.build(input_shape=(None, 32, 32, 3))  # 模型的輸入大小
model.summary()  # 打印網(wǎng)絡(luò)結(jié)構(gòu)

"4.模型編譯"
model.compile(optimizer='Adam',
              loss=losses.CategoricalCrossentropy(from_logits=False),
              metrics=['accuracy']
                )
"""
模型的優(yōu)化器是Adam
損失函數(shù)是losses.CategoricalCrossentropy,
性能指標(biāo)是正確率accuracy
"""

"5.模型訓(xùn)練"
history = model.fit(db, epochs=20, validation_data=ds_val, validation_freq=1)
"""
模型訓(xùn)練的次數(shù)是20,每1次循環(huán)進(jìn)行測(cè)試
"""
"6.模型保存"
model.save('cnn_cifar10.h5')  # 以.h5文件格式保存模型

"7.模型評(píng)價(jià)"
model.evaluate(ds_val)  # 得到測(cè)試集的正確率

"8.模型測(cè)試"
sample = next(iter(ds_val))  # 取一個(gè)batchsz的測(cè)試集數(shù)據(jù)
x = sample[0]  # 測(cè)試集數(shù)據(jù)
y = sample[1]  # 測(cè)試集的標(biāo)簽
pred = model.predict(x)  # 將一個(gè)batchsz的測(cè)試集數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)的結(jié)果
pred = tf.argmax(pred, axis=1)  # 每個(gè)預(yù)測(cè)的結(jié)果的概率最大值的下標(biāo),也就是預(yù)測(cè)的數(shù)字
y = tf.argmax(y, axis=1)  # 每個(gè)標(biāo)簽的最大值對(duì)應(yīng)的下標(biāo),也就是標(biāo)簽對(duì)應(yīng)的數(shù)字
print(pred)  # 打印預(yù)測(cè)結(jié)果
print(y)  # 打印標(biāo)簽類別

"9.模型訓(xùn)練時(shí)的可視化"
# 顯示訓(xùn)練集和驗(yàn)證集的acc和loss曲線
acc = history.history['accuracy']  # 獲取模型訓(xùn)練中的accuracy
val_acc = history.history['val_accuracy']  # 獲取模型訓(xùn)練中的val_accuracy
loss = history.history['loss']  # 獲取模型訓(xùn)練中的loss
val_loss = history.history['val_loss']  # 獲取模型訓(xùn)練中的val_loss
# 繪值acc曲線
plt.figure(1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
# 繪制loss曲線
plt.figure(2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()  # 將結(jié)果顯示出來


5. 改進(jìn)后的代碼和結(jié)果

# 導(dǎo)入tensorflow
import tensorflow as tf
# 導(dǎo)入keras
from tensorflow import keras
from keras.datasets import cifar10
# 引入繪制acc和loss曲線的庫
import matplotlib.pyplot as plt
# 引入ANN的必要的類
from keras.layers import Dense, Conv2D, MaxPool2D, Flatten, Dropout
from keras.models import Sequential
from keras import optimizers, losses
from keras.preprocessing.image import ImageDataGenerator
"1.加載數(shù)據(jù)"
"""
x_train是fashion_mnist訓(xùn)練集圖片,大小的32*32*3的,y_train是對(duì)應(yīng)的標(biāo)簽是數(shù)字
x_test是fashion_mnist測(cè)試集圖片,大小的32*32*3的,y_test是對(duì)應(yīng)的標(biāo)簽是數(shù)字
"""
(x_train, y_train), (x_test, y_test) = cifar10.load_data()  # 加載cifar10數(shù)據(jù)集
print('mnist_data:', x_train.shape, y_train.shape, x_test.shape, y_test.shape)  # 打印訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)的形狀
image_gen_train = ImageDataGenerator(
    rescale=1. / 1.,  # 如為圖像,分母為255時(shí),可歸至0~1
    rotation_range=45,  # 隨機(jī)45度旋轉(zhuǎn)
    width_shift_range=.15,  # 寬度偏移
    height_shift_range=.15,  # 高度偏移
    horizontal_flip=False,  # 水平翻轉(zhuǎn)
    zoom_range=0.5  # 將圖像隨機(jī)縮放閾量50%
)
image_gen_train.fit(x_train)
"""
因?yàn)閥的形狀是(None,1)的,如果直接進(jìn)行獨(dú)熱編碼會(huì)變成(None,1,10),會(huì)和神經(jīng)網(wǎng)絡(luò)的輸出形狀(None,10)不匹配,
因此需要對(duì)獨(dú)熱編碼后的y的形狀進(jìn)行降維處理變成(None,10)
"""
y_train = tf.squeeze(y_train, axis=1)
y_test = tf.squeeze(y_test, axis=1)
"2.數(shù)據(jù)預(yù)處理"


def preprocess(x, y):  # 數(shù)據(jù)預(yù)處理函數(shù)
    x = tf.cast(x, dtype=tf.float32) / 255.  # 將輸入的圖片進(jìn)行歸一化,從0-255變換到0-1
    y = tf.cast(y, dtype=tf.int32)  # 將輸入圖片的標(biāo)簽轉(zhuǎn)換為int32類型
    y = tf.one_hot(y, depth=10)
    """
    # 將標(biāo)簽y進(jìn)行獨(dú)熱編碼,因?yàn)樯窠?jīng)網(wǎng)絡(luò)的輸出是10個(gè)概率值,而y是1個(gè)數(shù),
    計(jì)算loss時(shí)無法對(duì)應(yīng)計(jì)算,因此將y進(jìn)行獨(dú)立編碼成為10個(gè)數(shù)的行向量,然后進(jìn)行l(wèi)oss的計(jì)算
    獨(dú)熱編碼:例如數(shù)值1的10分類的獨(dú)熱編碼是[0 1 0 0 0 0 0 0 0 0,即1的位置為1,其余位置為0
    """
    return x, y


batchsz = 128  # 每次輸入給神經(jīng)網(wǎng)絡(luò)的圖片數(shù)
"""
數(shù)據(jù)加載進(jìn)入內(nèi)存后,需要轉(zhuǎn)換成 Dataset 對(duì)象,才能利用 TensorFlow 提供的各種便捷功能。
通過 Dataset.from_tensor_slices 可以將訓(xùn)練部分的數(shù)據(jù)圖片 x 和標(biāo)簽 y 都轉(zhuǎn)換成Dataset 對(duì)象
"""
db = tf.data.Dataset.from_tensor_slices((x_train, y_train))  # 構(gòu)建訓(xùn)練集對(duì)象
db = db.map(preprocess).shuffle(50000).batch(batchsz)  # 將數(shù)據(jù)進(jìn)行預(yù)處理,隨機(jī)打散和批量處理
ds_val = tf.data.Dataset.from_tensor_slices((x_test, y_test))  # 構(gòu)建測(cè)試集對(duì)象
ds_val = ds_val.map(preprocess).batch(batchsz)  # 將數(shù)據(jù)進(jìn)行預(yù)處理,隨機(jī)打散和批量處理


"3.構(gòu)建網(wǎng)絡(luò)模型"
model = Sequential([Conv2D(32, kernel_size=(3, 3), padding='same', activation='relu'),
                    Dropout(0.25),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Conv2D(filters=64, kernel_size=(3, 3),padding='same', activation='relu'),
                    Dropout(0.25),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Conv2D(filters=128, kernel_size=(3, 3), padding='same', activation='relu'),
                    Dropout(0.25),
                    MaxPool2D(pool_size=(2, 2), strides=2),
                    Flatten(),
                    Dense(1024, activation='relu'),
                    Dense(10,activation='softmax')])

model.build(input_shape=(None, 32, 32, 3))  # 模型的輸入大小
model.summary()  # 打印網(wǎng)絡(luò)結(jié)構(gòu)

"4.模型編譯"
model.compile(optimizer='Adam',
              loss=losses.CategoricalCrossentropy(from_logits=False),
              metrics=['accuracy']
                )
"""
模型的優(yōu)化器是Adam
損失函數(shù)是losses.CategoricalCrossentropy,
性能指標(biāo)是正確率accuracy
"""

"5.模型訓(xùn)練"
history = model.fit(db, epochs=20, validation_data=ds_val, validation_freq=1)
"""
模型訓(xùn)練的次數(shù)是10,每1次循環(huán)進(jìn)行測(cè)試
"""
"6.模型保存"
model.save('cnn_cifar10_4.h5')  # 以.h5文件格式保存模型

"7.模型評(píng)價(jià)"
model.evaluate(ds_val)  # 得到測(cè)試集的正確率

"8.模型測(cè)試"
sample = next(iter(ds_val))  # 取一個(gè)batchsz的測(cè)試集數(shù)據(jù)
x = sample[0]  # 測(cè)試集數(shù)據(jù)
y = sample[1]  # 測(cè)試集的標(biāo)簽
pred = model.predict(x)  # 將一個(gè)batchsz的測(cè)試集數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò)的結(jié)果
pred = tf.argmax(pred, axis=1)  # 每個(gè)預(yù)測(cè)的結(jié)果的概率最大值的下標(biāo),也就是預(yù)測(cè)的數(shù)字
y = tf.argmax(y, axis=1)  # 每個(gè)標(biāo)簽的最大值對(duì)應(yīng)的下標(biāo),也就是標(biāo)簽對(duì)應(yīng)的數(shù)字
print(pred)  # 打印預(yù)測(cè)結(jié)果
print(y)  # 打印標(biāo)簽類別

"9.模型訓(xùn)練時(shí)的可視化"
# 顯示訓(xùn)練集和驗(yàn)證集的acc和loss曲線
acc = history.history['accuracy']  # 獲取模型訓(xùn)練中的accuracy
val_acc = history.history['val_accuracy']  # 獲取模型訓(xùn)練中的val_accuracy
loss = history.history['loss']  # 獲取模型訓(xùn)練中的loss
val_loss = history.history['val_loss']  # 獲取模型訓(xùn)練中的val_loss
# 繪值acc曲線
plt.figure(1)
plt.plot(acc, label='Training Accuracy')
plt.plot(val_acc, label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.legend()
# 繪制loss曲線
plt.figure(2)
plt.plot(loss, label='Training Loss')
plt.plot(val_loss, label='Validation Loss')
plt.title('Training and Validation Loss')
plt.legend()
plt.show()  # 將結(jié)果顯示出來


Epoch 1/20
391/391 [==============================] - 109s 272ms/step - loss: 1.4598 - accuracy: 0.4688 - val_loss: 1.2981 - val_accuracy: 0.5713
Epoch 2/20
391/391 [==============================] - 103s 262ms/step - loss: 1.0536 - accuracy: 0.6297 - val_loss: 1.0809 - val_accuracy: 0.6476
Epoch 3/20
391/391 [==============================] - 104s 264ms/step - loss: 0.8955 - accuracy: 0.6840 - val_loss: 0.9347 - val_accuracy: 0.7052
Epoch 4/20
391/391 [==============================] - 103s 262ms/step - loss: 0.7785 - accuracy: 0.7258 - val_loss: 0.9195 - val_accuracy: 0.6880
Epoch 5/20
391/391 [==============================] - 104s 264ms/step - loss: 0.6896 - accuracy: 0.7575 - val_loss: 0.8039 - val_accuracy: 0.7330
Epoch 6/20
391/391 [==============================] - 103s 262ms/step - loss: 0.6085 - accuracy: 0.7864 - val_loss: 0.8141 - val_accuracy: 0.7296
Epoch 7/20
391/391 [==============================] - 102s 261ms/step - loss: 0.5378 - accuracy: 0.8102 - val_loss: 0.7418 - val_accuracy: 0.7463
Epoch 8/20
391/391 [==============================] - 102s 259ms/step - loss: 0.4698 - accuracy: 0.8335 - val_loss: 0.6867 - val_accuracy: 0.7693
Epoch 9/20
391/391 [==============================] - 102s 259ms/step - loss: 0.4042 - accuracy: 0.8563 - val_loss: 0.6729 - val_accuracy: 0.7734
Epoch 10/20
391/391 [==============================] - 103s 261ms/step - loss: 0.3474 - accuracy: 0.8763 - val_loss: 0.6690 - val_accuracy: 0.7696
Epoch 11/20
391/391 [==============================] - 102s 261ms/step - loss: 0.2969 - accuracy: 0.8958 - val_loss: 0.6920 - val_accuracy: 0.7660
Epoch 12/20
391/391 [==============================] - 102s 260ms/step - loss: 0.2597 - accuracy: 0.9072 - val_loss: 0.7243 - val_accuracy: 0.7558
Epoch 13/20
391/391 [==============================] - 102s 259ms/step - loss: 0.2146 - accuracy: 0.9235 - val_loss: 0.7107 - val_accuracy: 0.7599
Epoch 14/20
391/391 [==============================] - 106s 269ms/step - loss: 0.1904 - accuracy: 0.9318 - val_loss: 0.6790 - val_accuracy: 0.7760
Epoch 15/20
391/391 [==============================] - 103s 262ms/step - loss: 0.1703 - accuracy: 0.9404 - val_loss: 0.7177 - val_accuracy: 0.7706
Epoch 16/20
391/391 [==============================] - 103s 262ms/step - loss: 0.1526 - accuracy: 0.9463 - val_loss: 0.7038 - val_accuracy: 0.7781
Epoch 17/20
391/391 [==============================] - 103s 262ms/step - loss: 0.1333 - accuracy: 0.9520 - val_loss: 0.7267 - val_accuracy: 0.7770
Epoch 18/20
391/391 [==============================] - 103s 263ms/step - loss: 0.1253 - accuracy: 0.9576 - val_loss: 0.7518 - val_accuracy: 0.7728
Epoch 19/20
391/391 [==============================] - 103s 263ms/step - loss: 0.1210 - accuracy: 0.9570 - val_loss: 0.7855 - val_accuracy: 0.7670
Epoch 20/20
391/391 [==============================] - 104s 265ms/step - loss: 0.1105 - accuracy: 0.9607 - val_loss: 0.8065 - val_accuracy: 0.7721
79/79 [==============================] - 4s 48ms/step - loss: 0.8065 - accuracy: 0.7721
4/4 [==============================] - 0s 15ms/step

python與深度學(xué)習(xí)(九):CNN和cifar10,python,深度學(xué)習(xí),深度學(xué)習(xí),python
python與深度學(xué)習(xí)(九):CNN和cifar10,python,深度學(xué)習(xí),深度學(xué)習(xí),python
結(jié)果有所改善,但是過擬合仍然存在。文章來源地址http://www.zghlxwxcb.cn/news/detail-614102.html

到了這里,關(guān)于python與深度學(xué)習(xí)(九):CNN和cifar10的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 深度學(xué)習(xí)畢設(shè)項(xiàng)目 深度學(xué)習(xí)貓狗分類 - python opencv cnn

    深度學(xué)習(xí)畢設(shè)項(xiàng)目 深度學(xué)習(xí)貓狗分類 - python opencv cnn

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月03日
    瀏覽(16)
  • 深度學(xué)習(xí)畢設(shè)項(xiàng)目 深度學(xué)習(xí)疲勞檢測(cè) 駕駛行為檢測(cè) - python opencv cnn

    深度學(xué)習(xí)畢設(shè)項(xiàng)目 深度學(xué)習(xí)疲勞檢測(cè) 駕駛行為檢測(cè) - python opencv cnn

    ?? 這兩年開始畢業(yè)設(shè)計(jì)和畢業(yè)答辯的要求和難度不斷提升,傳統(tǒng)的畢設(shè)題目缺少創(chuàng)新和亮點(diǎn),往往達(dá)不到畢業(yè)答辯的要求,這兩年不斷有學(xué)弟學(xué)妹告訴學(xué)長自己做的項(xiàng)目系統(tǒng)達(dá)不到老師的要求。 為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天

    2024年02月03日
    瀏覽(27)
  • 【畢業(yè)設(shè)計(jì)】深度學(xué)習(xí)水果識(shí)別系統(tǒng) - python CNN

    【畢業(yè)設(shè)計(jì)】深度學(xué)習(xí)水果識(shí)別系統(tǒng) - python CNN

    ?? Hi,大家好,這里是丹成學(xué)長的畢設(shè)系列文章! ?? 對(duì)畢設(shè)有任何疑問都可以問學(xué)長哦! 這兩年開始,各個(gè)學(xué)校對(duì)畢設(shè)的要求越來越高,難度也越來越大… 畢業(yè)設(shè)計(jì)耗費(fèi)時(shí)間,耗費(fèi)精力,甚至有些題目即使是專業(yè)的老師或者碩士生也需要很長時(shí)間,所以一旦發(fā)現(xiàn)問題,一定

    2023年04月13日
    瀏覽(22)
  • python與深度學(xué)習(xí)(六):CNN和手寫數(shù)字識(shí)別二

    python與深度學(xué)習(xí)(六):CNN和手寫數(shù)字識(shí)別二

    本篇文章是對(duì)上篇文章訓(xùn)練的模型進(jìn)行測(cè)試。首先是將訓(xùn)練好的模型進(jìn)行重新加載,然后采用opencv對(duì)圖片進(jìn)行加載,最后將加載好的圖片輸送給模型并且顯示結(jié)果。 在這里導(dǎo)入需要的第三方庫如cv2,如果沒有,則需要自行下載。 把MNIST數(shù)據(jù)集進(jìn)行加載,并且把訓(xùn)練好的模型也

    2024年02月15日
    瀏覽(25)
  • 計(jì)算機(jī)競(jìng)賽 基于CNN實(shí)現(xiàn)謠言檢測(cè) - python 深度學(xué)習(xí) 機(jī)器學(xué)習(xí)

    計(jì)算機(jī)競(jìng)賽 基于CNN實(shí)現(xiàn)謠言檢測(cè) - python 深度學(xué)習(xí) 機(jī)器學(xué)習(xí)

    ?? 優(yōu)質(zhì)競(jìng)賽項(xiàng)目系列,今天要分享的是 基于CNN實(shí)現(xiàn)謠言檢測(cè) 該項(xiàng)目較為新穎,適合作為競(jìng)賽課題方向,學(xué)長非常推薦! ?? 更多資料, 項(xiàng)目分享: https://gitee.com/dancheng-senior/postgraduate 社交媒體的發(fā)展在加速信息傳播的同時(shí),也帶來了虛假謠言信息的泛濫,往往會(huì)引發(fā)諸多不

    2024年02月12日
    瀏覽(96)
  • 文本分類系統(tǒng)Python,基于深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)

    文本分類系統(tǒng)Python,基于深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)

    文本分類系統(tǒng),使用Python作為主要開發(fā)語言,通過TensorFlow搭建CNN卷積神經(jīng)網(wǎng)絡(luò)對(duì)十余種不同種類的文本數(shù)據(jù)集進(jìn)行訓(xùn)練,最后得到一個(gè)h5格式的本地模型文件,然后采用Django開發(fā)網(wǎng)頁界面,實(shí)現(xiàn)用戶在界面中輸入一段文字,識(shí)別其所屬的文本種類。 在我們的日常生活和工作中

    2024年02月08日
    瀏覽(93)
  • 車牌識(shí)別系統(tǒng)Python,基于深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)算法

    車牌識(shí)別系統(tǒng)Python,基于深度學(xué)習(xí)CNN卷積神經(jīng)網(wǎng)絡(luò)算法

    車牌識(shí)別系統(tǒng),基于Python實(shí)現(xiàn),通過TensorFlow搭建CNN卷積神經(jīng)網(wǎng)絡(luò)模型,對(duì)車牌數(shù)據(jù)集圖片進(jìn)行訓(xùn)練最后得到模型,并基于Django框架搭建網(wǎng)頁端平臺(tái),實(shí)現(xiàn)用戶在網(wǎng)頁端輸入一張圖片識(shí)別其結(jié)果,并基于Pyqt5搭建桌面端可視化界面。 在智能交通和車輛監(jiān)控領(lǐng)域,車牌識(shí)別技術(shù)扮

    2024年02月07日
    瀏覽(102)
  • 競(jìng)賽 深度學(xué)習(xí)疫情社交安全距離檢測(cè)算法 - python opencv cnn

    競(jìng)賽 深度學(xué)習(xí)疫情社交安全距離檢測(cè)算法 - python opencv cnn

    ?? 優(yōu)質(zhì)競(jìng)賽項(xiàng)目系列,今天要分享的是 ?? **基于深度學(xué)習(xí)疫情社交安全距離檢測(cè)算法 ** 該項(xiàng)目較為新穎,適合作為競(jìng)賽課題方向,學(xué)長非常推薦! ??學(xué)長這里給一個(gè)題目綜合評(píng)分(每項(xiàng)滿分5分) 難度系數(shù):3分 工作量:3分 創(chuàng)新點(diǎn):5分 ?? 更多資料, 項(xiàng)目分享: https://git

    2024年02月03日
    瀏覽(26)
  • python與深度學(xué)習(xí)(七):CNN和fashion_mnist

    python與深度學(xué)習(xí)(七):CNN和fashion_mnist

    本篇文章是CNN的另外一個(gè)例子,fashion_mnist,是衣服類的數(shù)據(jù)集。 可以搭建和手寫數(shù)字識(shí)別的一樣的模神經(jīng)網(wǎng)絡(luò)來訓(xùn)練模型。 以下第三方庫是python專門用于深度學(xué)習(xí)的庫 把fashion_mnist數(shù)據(jù)集進(jìn)行加載 (1) 將輸入的圖片進(jìn)行歸一化,從0-255變換到0-1; (2) 將輸入圖片的形狀(60000,

    2024年02月15日
    瀏覽(15)
  • 【大數(shù)據(jù)畢設(shè)選題】基于CNN實(shí)現(xiàn)謠言檢測(cè) - python 深度學(xué)習(xí) 機(jī)器學(xué)習(xí)

    【大數(shù)據(jù)畢設(shè)選題】基于CNN實(shí)現(xiàn)謠言檢測(cè) - python 深度學(xué)習(xí) 機(jī)器學(xué)習(xí)

    Hi,大家好,今天向大家介紹 一個(gè)深度學(xué)習(xí)項(xiàng)目 基于CNN實(shí)現(xiàn)謠言檢測(cè) 社交媒體的發(fā)展在加速信息傳播的同時(shí),也帶來了虛假謠言信息的泛濫,往往會(huì)引發(fā)諸多不安定因素,并對(duì)經(jīng)濟(jì)和社會(huì)產(chǎn)生巨大的影響。 本項(xiàng)目所使用的數(shù)據(jù)是從新浪微博不實(shí)信息舉報(bào)平臺(tái)抓取的中文謠言

    2024年01月20日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包