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

TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

這篇具有很好參考價(jià)值的文章主要介紹了TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

首先,你已經(jīng)安裝好anaconda3、創(chuàng)建好環(huán)境、下載好TensorFlow2模塊并且下載好jupyter了,那么我們就直接打開(kāi)jupyter開(kāi)始進(jìn)行CIFAR10數(shù)據(jù)集的訓(xùn)練。

第一步:下載CIFAR10數(shù)據(jù)集

下載網(wǎng)址:http://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz

將數(shù)據(jù)集下載到合適的路徑,方便模型訓(xùn)練的時(shí)候調(diào)用

第二步:導(dǎo)入該導(dǎo)的庫(kù)

# tensorflow1.x
import tensorflow as tf
import numpy as np
import os
from matplotlib import pyplot as plt

第三步:加載剛剛下載的數(shù)據(jù)集,如果你下載了?cifar-10-python.tar.gz那么就先解壓這個(gè)壓縮包,將里面的文件放入一個(gè)文件夾,我這里放在為cifar-10-batches-py目錄下,所有文件如圖

TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

?然后加載該數(shù)據(jù)集

import pickle

def unpickle(file):
    with open(file, 'rb') as fo:
        dict = pickle.load(fo, encoding='bytes')
    return dict

def load_data(path):
    # 讀取訓(xùn)練數(shù)據(jù)
    train_images = []
    train_labels = []
    for i in range(1, 6):
        file = path + "/data_batch_{}".format(i)
        data = unpickle(file)
        train_images.append(data[b"data"])
        train_labels.append(data[b"labels"])
    train_images = np.concatenate(train_images)
    train_labels = np.concatenate(train_labels)
    # 讀取測(cè)試數(shù)據(jù)
    file = path + "/test_batch"
    data = unpickle(file)
    test_images = data[b"data"]
    test_labels = np.array(data[b"labels"])
    # 轉(zhuǎn)換數(shù)據(jù)類(lèi)型
    train_images = train_images.astype(np.float32)
    test_images = test_images.astype(np.float32)
    y_train = np.array(train_labels)
    y_test = np.array(test_labels)
    # 將像素值縮放到[0, 1]范圍內(nèi)
    x_train = train_images/255.0
    x_test = test_images/255.0
    
    # 將標(biāo)簽數(shù)據(jù)轉(zhuǎn)換為one-hot編碼
#     train_labels = tf.keras.utils.to_categorical(train_labels, num_classes=10)
#     test_labels = tf.keras.utils.to_categorical(test_labels, num_classes=10)
    
    return (x_train, y_train), (x_test, y_test)


# 加載數(shù)據(jù)集
(train_images, train_labels), (test_images, test_labels) = load_data("../cifar_data/cifar-10-batches-py")
train_images = train_images.reshape(50000, 32, 32, 3)
test_images = test_images.reshape(10000, 32, 32, 3)

當(dāng)然還有更簡(jiǎn)單的方法那就是使用TensorFlow內(nèi)部模塊下載數(shù)據(jù)集,如下

# 下載數(shù)據(jù)集
cifar10=tf.keras.datasets.cifar10

(x_train,y_train),(x_test,y_test)=cifar10.load_data()

x_train[0][0][0]
# 對(duì)圖像images進(jìn)行數(shù)字標(biāo)準(zhǔn)化
x_train=x_train.astype('float32')/255.0 
x_test = x_test.astype('float32')/ 255.0

第四步:數(shù)據(jù)集本來(lái)的標(biāo)簽是數(shù)字,我們可以將它轉(zhuǎn)化成對(duì)應(yīng)的類(lèi)型名

label_dict={0:"airplane",1:"automobile",2:"bird",3:"cat",4:"deer",5:"dog", 6:"frog", 7:"horse", 8:"ship", 9:"truck"}

第五步:開(kāi)始構(gòu)建神經(jīng)網(wǎng)絡(luò)模型,這里我就簡(jiǎn)單構(gòu)建一個(gè)類(lèi)似AlexNet的卷積神網(wǎng)絡(luò)模型

# 建立卷積神經(jīng)網(wǎng)絡(luò)CNN模型AlexNet
#建立Sequential線(xiàn)性堆疊模型
'''
Conv2D(filters=,kernel_size=,strides=,padding=,activation=,input_shape=,)
filters:卷積核數(shù)量,即輸出的特征圖數(shù)量。
kernel_size:卷積核大小,可以是一個(gè)整數(shù)或者一個(gè)元組,例如(3, 3)。
strides:卷積步長(zhǎng),可以是一個(gè)整數(shù)或者一個(gè)元組,例如(1, 1)。
padding:填充方式,可以是'same'或'valid'。'same'表示在輸入圖像四周填充0,保證輸出特征圖大小與輸入圖像大小相同;
        'valid'表示不填充,直接進(jìn)行卷積運(yùn)算。
activation:激活函數(shù),可以是一個(gè)字符串、一個(gè)函數(shù)或者一個(gè)可調(diào)用對(duì)象。
input_shape:輸入圖像的形狀
'''

'''
MaxPooling2D(pool_size=,strides=,padding=,)
pool_size:池化窗口大小,可以是一個(gè)整數(shù)或者一個(gè)元組,例如(2, 2)表示2x2的池化窗口。
'''


#this is a noe model,you just have to choose one or the other
def creatAlexNet():
    model = tf.keras.models.Sequential()#第1個(gè)卷積層
    model.add(tf.keras.layers.Conv2D(filters=32,
                                     kernel_size=(3,3), 
                                     input_shape=(32,32,3),
                                     activation='relu', padding='same'))
    # 防止過(guò)擬合
    model.add(tf.keras.layers.Dropout(rate=0.3))
    #第1個(gè)池化層
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))
    #第2個(gè)卷積層
    model.add(tf.keras.layers.Conv2D(filters = 64,kernel_size=(3,3), activation='relu', padding ='same'))
    # 防止過(guò)擬合
    model.add(tf.keras.layers.Dropout(rate=0.3))#第2個(gè)池化層
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))# 平坦層

    #第3個(gè)卷積層
    model.add(tf.keras.layers.Conv2D(filters = 128,kernel_size=(3,3), activation='relu', padding ='same'))
    # 防止過(guò)擬合
    model.add(tf.keras.layers.Dropout(rate=0.3))#第3個(gè)池化層
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))# 平坦層

    model.add(tf.keras.layers.Flatten())# 添加輸出層
    model.add(tf.keras.layers.Dense(10,activation='softmax'))
    return model

第六步:開(kāi)始加載模型

執(zhí)行模型函數(shù)

model = creatAlexNet()

輸出摘要

model.summary()

摘要結(jié)果如下:?

TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

?超參數(shù)定義及模型訓(xùn)練

'''
model.compile(optimizer =,loss=,metrics=)
optimizer:指定優(yōu)化器,可以傳入字符串標(biāo)識(shí)符(如'rmsprop'、'adam'等),也可以傳入Optimizer類(lèi)的實(shí)例。
loss:指定損失函數(shù),可以傳入字符串標(biāo)識(shí)符(如'mse'、'categorical_crossentropy'等),也可以傳入自定義的損失函數(shù)。
metrics:指定評(píng)估指標(biāo),可以傳入字符串標(biāo)識(shí)符(如'accuracy'、'mae'等),也可以傳入自定義的評(píng)估函數(shù)或函數(shù)列表
'''

'''
model.fit(x=,y=,batch_size=,epochs=,verbose=,validation_data=,validation_split=,shuffle=,callbacks=)
x:訓(xùn)練數(shù)據(jù),通常為一個(gè)形狀為(樣本數(shù), 特征數(shù))的numpy數(shù)組,也可以是一個(gè)包含多個(gè)numpy數(shù)組的列表。

y:標(biāo)簽,也是一個(gè)numpy數(shù)組或列表,長(zhǎng)度應(yīng)與x的第一維相同。

batch_size:批量大小,表示每次迭代訓(xùn)練的樣本數(shù),通常選擇2的冪次方,比如32、64、128等。

epochs:訓(xùn)練輪數(shù),一個(gè)輪數(shù)表示使用所有訓(xùn)練數(shù)據(jù)進(jìn)行了一次前向傳播和反向傳播,通常需要根據(jù)實(shí)際情況調(diào)整。

verbose:輸出詳細(xì)信息,0表示不輸出,1表示輸出進(jìn)度條,2表示每個(gè)epoch輸出一次。

validation_data:驗(yàn)證數(shù)據(jù),通常為一個(gè)形狀與x相同的numpy數(shù)組,也可以是一個(gè)包含多個(gè)numpy數(shù)組的列表。

validation_split:切分驗(yàn)證集,將訓(xùn)練數(shù)據(jù)的一部分用作驗(yàn)證數(shù)據(jù),取值范圍在0到1之間,表示將訓(xùn)練數(shù)據(jù)的一部分劃分為驗(yàn)證數(shù)據(jù)的比例。

shuffle:是否打亂訓(xùn)練數(shù)據(jù),True表示每個(gè)epoch之前打亂數(shù)據(jù),F(xiàn)alse表示不打亂數(shù)據(jù)。

callbacks:回調(diào)函數(shù),用于在訓(xùn)練過(guò)程中定期保存模型、調(diào)整學(xué)習(xí)率等操作,
常用的回調(diào)函數(shù)包括ModelCheckpoint、EarlyStopping、ReduceLROnPlateau等。
'''

# 設(shè)置訓(xùn)練參數(shù)
train_epochs=10#訓(xùn)練輪數(shù)
batch_size=100#單次訓(xùn)練樣本數(shù)(批次大?。?
# 定義訓(xùn)練模式
model.compile(optimizer ='adam',#優(yōu)化器
loss='sparse_categorical_crossentropy',#損失函數(shù)
              metrics=['accuracy'])#評(píng)估模型的方式
#訓(xùn)練模型
train_history = model.fit(x_train,y_train,validation_split = 0.2, epochs = train_epochs, 
                          batch_size = batch_size)

訓(xùn)練過(guò)程如下:

TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

第七步:訓(xùn)練的損失率和成功率的可視化圖

# 定義訓(xùn)練過(guò)程可視化函數(shù)
def visu_train_history(train_history,train_metric,validation_metric):
    plt.plot(train_history.history[train_metric])
    plt.plot(train_history.history[validation_metric])
    plt.title('Train History')
    plt.ylabel(train_metric)
    plt.xlabel('epoch')
    plt.legend(['train','validation'],loc='upper left')
    plt.show()

?損失率可視化

visu_train_history(train_history,'loss','val_loss')

?TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

成功率可視化?

visu_train_history(train_history,'accuracy','val_accuracy')

?TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

第八步:模型測(cè)試及評(píng)估

用測(cè)試集評(píng)估模型

# 評(píng)估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('Test accuracy:', test_acc)

?模型測(cè)試,可視化測(cè)試

#model test
preds = model.predict(x_test)

可視化函數(shù)

# 定義顯示圖像數(shù)據(jù)及其對(duì)應(yīng)標(biāo)簽的函數(shù)
# 圖像列表
def plot_images_labels_prediction(images,# 標(biāo)簽列表
                                  labels,
                                  preds,#預(yù)測(cè)值列表
                                  index,#從第index個(gè)開(kāi)始顯示
                                  num = 5):  # 缺省一次顯示5幅
    fig=plt.gcf()#獲取當(dāng)前圖表,Get Current Figure 
    fig.set_size_inches(12,6)#1英寸等于2.54cm 
    if num > 10:#最多顯示10個(gè)子圖
        num = 10
    for i in range(0, num):
        ax = plt.subplot(2,5,i+1)#獲取當(dāng)前要處理的子圖
        plt.tight_layout()
        ax.imshow(images[index])
        title=str(i)+','+label_dict[labels[index][0]]#構(gòu)建該圖上要顯示的title信息
        if len(preds)>0:
            title +='=>' + label_dict[np.argmax(preds[index])]
        ax.set_title(title,fontsize=10)#顯示圖上的title信息
        index += 1 
    plt.show()

執(zhí)行可視化函數(shù)

plot_images_labels_prediction(x_test,y_test, preds,15,30)

?結(jié)果如下:

TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

第九步:模型保存及模型使用,測(cè)試外部圖片

保存模型

# 保存模型
model_filename ='models/cifarCNNModel.h5'
model.save(model_filename)

加載模型,測(cè)試模型

方法一:使用TensorFlow內(nèi)部模塊加載圖片,將dog.jpg路徑換成你的圖片路徑

# 加載模型
loaded_model = tf.keras.models.load_model('models/cifarCNNModel.h5')

type = ("airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck")
label_dict={0:"airplane",1:"automobile",2:"bird",3:"cat",4:"deer",5:"dog", 6:"frog", 7:"horse", 8:"ship", 9:"truck"}

# 加載外來(lái)圖片
img = tf.keras.preprocessing.image.load_img(
    'dog.jpg', target_size=(32, 32)
)

# 轉(zhuǎn)化為numpy數(shù)組
img_array = tf.keras.preprocessing.image.img_to_array(img)

# 歸一化數(shù)據(jù)
img_array = img_array / 255.0

# 維度擴(kuò)展
img_array = np.expand_dims(img_array, axis=0)

# 預(yù)測(cè)類(lèi)別
predictions = loaded_model.predict(img_array)
pre_label = np.argmax(predictions)
plt.title("type:{}, pre_label:{}".format(label_dict[pre_label],pre_label))
plt.imshow(img, cmap=plt.get_cmap('gray'))

?結(jié)果如下,預(yù)測(cè)結(jié)果是正確的,我這里在瀏覽器下載的確實(shí)是一張狗的圖片?

TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

方法二:使用PIL的庫(kù)加載圖片進(jìn)行預(yù)測(cè)?

from PIL import Image
import numpy as np

img = Image.open('./cat.jpg')
img = img.resize((32, 32))
img_arr = np.array(img) / 255.0
img_arr = img_arr.reshape(1, 32, 32, 3)
pred = model.predict(img_arr)
class_idx = np.argmax(pred)
plt.title("type:{}, pre_label:{}".format(label_dict[class_idx],class_idx))
plt.imshow(img, cmap=plt.get_cmap('gray'))

結(jié)果如下,也是正確的,我這張圖片確實(shí)是一張貓的圖片

?TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

?方法三:從網(wǎng)絡(luò)上加載圖片進(jìn)行預(yù)測(cè),將下面的網(wǎng)址換成你想要預(yù)測(cè)的圖片網(wǎng)址

# 加載模型
loaded_model = tf.keras.models.load_model('models/cifarCNNModel.h5')
# 使用模型預(yù)測(cè)瀏覽器上的一張圖片
type = ("airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck")
label_dict={0:"airplane",1:"automobile",2:"bird",3:"cat",4:"deer",5:"dog", 6:"frog", 7:"horse", 8:"ship", 9:"truck"}

url = 'https://img1.baidu.com/it/u=1284172325,1569939558&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=580'
with urllib.request.urlopen(url) as url_response:
    img_array = np.asarray(bytearray(url_response.read()), dtype=np.uint8)
    img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
    img_array = cv2.resize(img, (32, 32))
    img_array = img_array / 255.0
    img_array = np.expand_dims(img_array, axis=0)
    
    predict_label = np.argmax(loaded_model.predict(img_array), axis=-1)[0]
    plt.imshow(img, cmap=plt.get_cmap('gray'))
    plt.title("Predict: {},Predict_label: {}".format(type[predict_label],predict_label))
    plt.xticks([])
    plt.yticks([])

結(jié)果如下, 這張就預(yù)測(cè)錯(cuò)了,明明是狗,預(yù)測(cè)成鳥(niǎo)(bird)去了

?TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試

完整代碼如下:

import tensorflow as tf
import numpy as np
import os
import matplotlib.pyplot as plt
import urllib
import cv2

# 下載數(shù)據(jù)集
cifar10=tf.keras.datasets.cifar10

(x_train,y_train),(x_test,y_test)=cifar10.load_data()

x_train[0][0][0]
# 對(duì)圖像images進(jìn)行數(shù)字標(biāo)準(zhǔn)化
x_train=x_train.astype('float32')/255.0 
x_test = x_test.astype('float32')/ 255.0

label_dict={0:"airplane",1:"automobile",2:"bird",3:"cat",4:"deer",5:"dog", 6:"frog", 7:"horse", 8:"ship", 9:"truck"}

# 建立卷積神經(jīng)網(wǎng)絡(luò)CNN模型AlexNet
#建立Sequential線(xiàn)性堆疊模型
'''
Conv2D(filters=,kernel_size=,strides=,padding=,activation=,input_shape=,)
filters:卷積核數(shù)量,即輸出的特征圖數(shù)量。
kernel_size:卷積核大小,可以是一個(gè)整數(shù)或者一個(gè)元組,例如(3, 3)。
strides:卷積步長(zhǎng),可以是一個(gè)整數(shù)或者一個(gè)元組,例如(1, 1)。
padding:填充方式,可以是'same'或'valid'。'same'表示在輸入圖像四周填充0,保證輸出特征圖大小與輸入圖像大小相同;
        'valid'表示不填充,直接進(jìn)行卷積運(yùn)算。
activation:激活函數(shù),可以是一個(gè)字符串、一個(gè)函數(shù)或者一個(gè)可調(diào)用對(duì)象。
input_shape:輸入圖像的形狀
'''

'''
MaxPooling2D(pool_size=,strides=,padding=,)
pool_size:池化窗口大小,可以是一個(gè)整數(shù)或者一個(gè)元組,例如(2, 2)表示2x2的池化窗口。
'''


#this is a noe model,you just have to choose one or the other
def creatAlexNet():
    model = tf.keras.models.Sequential()#第1個(gè)卷積層
    model.add(tf.keras.layers.Conv2D(filters=32,
                                     kernel_size=(3,3), 
                                     input_shape=(32,32,3),
                                     activation='relu', padding='same'))
    # 防止過(guò)擬合
    model.add(tf.keras.layers.Dropout(rate=0.3))
    #第1個(gè)池化層
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))
    #第2個(gè)卷積層
    model.add(tf.keras.layers.Conv2D(filters = 64,kernel_size=(3,3), activation='relu', padding ='same'))
    # 防止過(guò)擬合
    model.add(tf.keras.layers.Dropout(rate=0.3))#第2個(gè)池化層
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))# 平坦層

    #第3個(gè)卷積層
    model.add(tf.keras.layers.Conv2D(filters = 128,kernel_size=(3,3), activation='relu', padding ='same'))
    # 防止過(guò)擬合
    model.add(tf.keras.layers.Dropout(rate=0.3))#第3個(gè)池化層
    model.add(tf.keras.layers.MaxPooling2D(pool_size=(2,2)))# 平坦層

    model.add(tf.keras.layers.Flatten())# 添加輸出層
    model.add(tf.keras.layers.Dense(10,activation='softmax'))
    return model

model = creatAlexNet()
model.summary()

'''
model.compile(optimizer =,loss=,metrics=)
optimizer:指定優(yōu)化器,可以傳入字符串標(biāo)識(shí)符(如'rmsprop'、'adam'等),也可以傳入Optimizer類(lèi)的實(shí)例。
loss:指定損失函數(shù),可以傳入字符串標(biāo)識(shí)符(如'mse'、'categorical_crossentropy'等),也可以傳入自定義的損失函數(shù)。
metrics:指定評(píng)估指標(biāo),可以傳入字符串標(biāo)識(shí)符(如'accuracy'、'mae'等),也可以傳入自定義的評(píng)估函數(shù)或函數(shù)列表
'''

'''
model.fit(x=,y=,batch_size=,epochs=,verbose=,validation_data=,validation_split=,shuffle=,callbacks=)
x:訓(xùn)練數(shù)據(jù),通常為一個(gè)形狀為(樣本數(shù), 特征數(shù))的numpy數(shù)組,也可以是一個(gè)包含多個(gè)numpy數(shù)組的列表。

y:標(biāo)簽,也是一個(gè)numpy數(shù)組或列表,長(zhǎng)度應(yīng)與x的第一維相同。

batch_size:批量大小,表示每次迭代訓(xùn)練的樣本數(shù),通常選擇2的冪次方,比如32、64、128等。

epochs:訓(xùn)練輪數(shù),一個(gè)輪數(shù)表示使用所有訓(xùn)練數(shù)據(jù)進(jìn)行了一次前向傳播和反向傳播,通常需要根據(jù)實(shí)際情況調(diào)整。

verbose:輸出詳細(xì)信息,0表示不輸出,1表示輸出進(jìn)度條,2表示每個(gè)epoch輸出一次。

validation_data:驗(yàn)證數(shù)據(jù),通常為一個(gè)形狀與x相同的numpy數(shù)組,也可以是一個(gè)包含多個(gè)numpy數(shù)組的列表。

validation_split:切分驗(yàn)證集,將訓(xùn)練數(shù)據(jù)的一部分用作驗(yàn)證數(shù)據(jù),取值范圍在0到1之間,表示將訓(xùn)練數(shù)據(jù)的一部分劃分為驗(yàn)證數(shù)據(jù)的比例。

shuffle:是否打亂訓(xùn)練數(shù)據(jù),True表示每個(gè)epoch之前打亂數(shù)據(jù),F(xiàn)alse表示不打亂數(shù)據(jù)。

callbacks:回調(diào)函數(shù),用于在訓(xùn)練過(guò)程中定期保存模型、調(diào)整學(xué)習(xí)率等操作,
常用的回調(diào)函數(shù)包括ModelCheckpoint、EarlyStopping、ReduceLROnPlateau等。
'''

# 設(shè)置訓(xùn)練參數(shù)
train_epochs=10#訓(xùn)練輪數(shù)
batch_size=100#單次訓(xùn)練樣本數(shù)(批次大?。?
# 定義訓(xùn)練模式
model.compile(optimizer ='adam',#優(yōu)化器
loss='sparse_categorical_crossentropy',#損失函數(shù)
              metrics=['accuracy'])#評(píng)估模型的方式
#訓(xùn)練模型
train_history = model.fit(x_train,y_train,validation_split = 0.2, epochs = train_epochs, 
                          batch_size = batch_size)

# 定義訓(xùn)練過(guò)程可視化函數(shù)
def visu_train_history(train_history,train_metric,validation_metric):
    plt.plot(train_history.history[train_metric])
    plt.plot(train_history.history[validation_metric])
    plt.title('Train History')
    plt.ylabel(train_metric)
    plt.xlabel('epoch')
    plt.legend(['train','validation'],loc='upper left')
    plt.show()

visu_train_history(train_history,'accuracy','val_accuracy')

# 評(píng)估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print('Test accuracy:', test_acc)

#model test
preds = model.predict(x_test)

np.argmax(preds[0])

# 定義顯示圖像數(shù)據(jù)及其對(duì)應(yīng)標(biāo)簽的函數(shù)
# 圖像列表
def plot_images_labels_prediction(images,# 標(biāo)簽列表
                                  labels,
                                  preds,#預(yù)測(cè)值列表
                                  index,#從第index個(gè)開(kāi)始顯示
                                  num = 5):  # 缺省一次顯示5幅
    fig=plt.gcf()#獲取當(dāng)前圖表,Get Current Figure 
    fig.set_size_inches(12,6)#1英寸等于2.54cm 
    if num > 10:#最多顯示10個(gè)子圖
        num = 10
    for i in range(0, num):
        ax = plt.subplot(2,5,i+1)#獲取當(dāng)前要處理的子圖
        plt.tight_layout()
        ax.imshow(images[index])
        title=str(i)+','+label_dict[labels[index][0]]#構(gòu)建該圖上要顯示的title信息
        if len(preds)>0:
            title +='=>' + label_dict[np.argmax(preds[index])]
        ax.set_title(title,fontsize=10)#顯示圖上的title信息
        index += 1 
    plt.show()

plot_images_labels_prediction(x_test,y_test, preds,15,30)

# 保存模型
model_filename ='models/cifarCNNModel.h5'
model.save(model_filename)

# 加載模型
loaded_model = tf.keras.models.load_model('models/cifarCNNModel.h5')

type = ("airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck")
label_dict={0:"airplane",1:"automobile",2:"bird",3:"cat",4:"deer",5:"dog", 6:"frog", 7:"horse", 8:"ship", 9:"truck"}

# 加載外來(lái)圖片
img = tf.keras.preprocessing.image.load_img(
    'dog.jpg', target_size=(32, 32)
)

# 轉(zhuǎn)化為numpy數(shù)組
img_array = tf.keras.preprocessing.image.img_to_array(img)

# 歸一化數(shù)據(jù)
img_array = img_array / 255.0

# 維度擴(kuò)展
img_array = np.expand_dims(img_array, axis=0)

# 預(yù)測(cè)類(lèi)別
predictions = loaded_model.predict(img_array)
pre_label = np.argmax(predictions)
plt.title("type:{}, pre_label:{}".format(label_dict[pre_label],pre_label))
plt.imshow(img, cmap=plt.get_cmap('gray'))

#另一個(gè)加載圖片方法
from PIL import Image
import numpy as np

img = Image.open('./cat.jpg')
img = img.resize((32, 32))
img_arr = np.array(img) / 255.0
img_arr = img_arr.reshape(1, 32, 32, 3)
pred = model.predict(img_arr)
class_idx = np.argmax(pred)
plt.title("type:{}, pre_label:{}".format(label_dict[class_idx],class_idx))
plt.imshow(img, cmap=plt.get_cmap('gray'))

# 加載模型
loaded_model = tf.keras.models.load_model('models/cifarCNNModel.h5')
# 使用模型預(yù)測(cè)瀏覽器上的一張圖片
type = ("airplane", "automobile", "bird", "cat", "deer", "dog", "frog", "horse", "ship", "truck")
label_dict={0:"airplane",1:"automobile",2:"bird",3:"cat",4:"deer",5:"dog", 6:"frog", 7:"horse", 8:"ship", 9:"truck"}

url = 'https://img1.baidu.com/it/u=1284172325,1569939558&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=580'
with urllib.request.urlopen(url) as url_response:
    img_array = np.asarray(bytearray(url_response.read()), dtype=np.uint8)
    img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
    img_array = cv2.resize(img, (32, 32))
    img_array = img_array / 255.0
    img_array = np.expand_dims(img_array, axis=0)
    
    predict_label = np.argmax(loaded_model.predict(img_array), axis=-1)[0]
    plt.imshow(img, cmap=plt.get_cmap('gray'))
    plt.title("Predict: {},Predict_label: {}".format(type[predict_label],predict_label))
    plt.xticks([])
    plt.yticks([])

那么本篇文章CIFAR10數(shù)據(jù)集分類(lèi)模型訓(xùn)練就到此結(jié)束,感謝大家的繼續(xù)支持!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-478981.html

到了這里,關(guān)于TensorFlow2進(jìn)行CIFAR-10數(shù)據(jù)集動(dòng)物識(shí)別,保存模型并且進(jìn)行外部下載圖片測(cè)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(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)文章

  • Tensorflow2.0筆記 - Tensor的數(shù)據(jù)索引和切片

    Tensorflow2.0筆記 - Tensor的數(shù)據(jù)索引和切片

    ? ? ? ? 主要涉及的了基礎(chǔ)下標(biāo)索引\\\"[]\\\",逗號(hào)\\\",\\\",冒號(hào)\\\":\\\",省略號(hào)\\\"...\\\"操作,以及gather,gather_nd和boolean_mask的相關(guān)使用方法。 運(yùn)行結(jié)果: ? ....

    2024年01月23日
    瀏覽(20)
  • 【Python深度學(xué)習(xí)】Tensorflow+CNN進(jìn)行人臉識(shí)別實(shí)戰(zhàn)(附源碼和數(shù)據(jù)集)

    【Python深度學(xué)習(xí)】Tensorflow+CNN進(jìn)行人臉識(shí)別實(shí)戰(zhàn)(附源碼和數(shù)據(jù)集)

    需要源碼和數(shù)據(jù)集請(qǐng)點(diǎn)贊關(guān)注收藏后評(píng)論區(qū)留言私信~~~ 下面利用tensorflow平臺(tái)進(jìn)行人臉識(shí)別實(shí)戰(zhàn),使用的是Olivetti Faces人臉圖像 部分?jǐn)?shù)據(jù)集展示如下 ?程序訓(xùn)練過(guò)程如下 ?接下來(lái)訓(xùn)練CNN模型 可以看到訓(xùn)練進(jìn)度和損失值變化 接下來(lái)展示人臉識(shí)別結(jié)果 ? 程序會(huì)根據(jù)一張圖片自動(dòng)

    2024年02月09日
    瀏覽(29)
  • Pytorch實(shí)現(xiàn)動(dòng)物識(shí)別(含動(dòng)物數(shù)據(jù)集和訓(xùn)練代碼)

    Pytorch實(shí)現(xiàn)動(dòng)物識(shí)別(含動(dòng)物數(shù)據(jù)集和訓(xùn)練代碼)

    目錄 動(dòng)物數(shù)據(jù)集+動(dòng)物分類(lèi)識(shí)別訓(xùn)練代碼(Pytorch) 1. 前言 2. Animals-Dataset動(dòng)物數(shù)據(jù)集說(shuō)明 (1)Animals90動(dòng)物數(shù)據(jù)集 (2)Animals10動(dòng)物數(shù)據(jù)集 (3)自定義數(shù)據(jù)集 3. 動(dòng)物分類(lèi)識(shí)別模型訓(xùn)練 (1)項(xiàng)目安裝 (2)準(zhǔn)備Train和Test數(shù)據(jù) (3)配置文件:?config.yaml (4)開(kāi)始訓(xùn)練 (5)可視化訓(xùn)

    2024年02月02日
    瀏覽(78)
  • [Pytorch] CIFAR-10數(shù)據(jù)集的訓(xùn)練和模型優(yōu)化

    [Pytorch] CIFAR-10數(shù)據(jù)集的訓(xùn)練和模型優(yōu)化

    本篇文章借鑒了我的朋友Jc的報(bào)告,他是一個(gè)十分優(yōu)秀的人。 本篇文章記錄了第一次完整訓(xùn)練優(yōu)化的過(guò)程 在CIFAR-10 dataset的介紹中,cifar-10數(shù)據(jù)集一共10類(lèi)圖片,每一類(lèi)有6000張圖片,加起來(lái)就是60000張圖片,每張圖片的尺寸是32x32,圖片是彩色圖,整個(gè)數(shù)據(jù)集被分為5個(gè)訓(xùn)練批次

    2023年04月14日
    瀏覽(29)
  • 【深度學(xué)習(xí)】pytorch——實(shí)現(xiàn)CIFAR-10數(shù)據(jù)集的分類(lèi)

    【深度學(xué)習(xí)】pytorch——實(shí)現(xiàn)CIFAR-10數(shù)據(jù)集的分類(lèi)

    筆記為自我總結(jié)整理的學(xué)習(xí)筆記,若有錯(cuò)誤歡迎指出喲~ 往期文章: 【深度學(xué)習(xí)】pytorch——快速入門(mén) CIFAR-10是一個(gè)常用的圖像分類(lèi)數(shù)據(jù)集,每張圖片都是 3×32×32,3通道彩色圖片,分辨率為 32×32。 它包含了10個(gè)不同類(lèi)別,每個(gè)類(lèi)別有6000張圖像,其中5000張用于訓(xùn)練,1000張用于

    2024年02月06日
    瀏覽(54)
  • tensorflow2基礎(chǔ)

    TensorFlow 包含以下特性: 訓(xùn)練流程 數(shù)據(jù)的處理 ?:使用 tf.data 和 TFRecord 可以高效地構(gòu)建和預(yù)處理數(shù)據(jù)集,構(gòu)建訓(xùn)練數(shù)據(jù)流。同時(shí)可以使用 TensorFlow Datasets 快速載入常用的公開(kāi)數(shù)據(jù)集。 模型的建立與調(diào)試 ?:使用即時(shí)執(zhí)行模式和著名的神經(jīng)網(wǎng)絡(luò)高層 API 框架 Keras,結(jié)合可視化

    2024年02月11日
    瀏覽(30)
  • TensorFlow案例學(xué)習(xí):使用 YAMNet 進(jìn)行遷移學(xué)習(xí),對(duì)音頻進(jìn)行識(shí)別

    TensorFlow案例學(xué)習(xí):使用 YAMNet 進(jìn)行遷移學(xué)習(xí),對(duì)音頻進(jìn)行識(shí)別

    上一篇文章 TensorFlow案例學(xué)習(xí):簡(jiǎn)單的音頻識(shí)別 我們簡(jiǎn)單學(xué)習(xí)了音頻識(shí)別。這次我們繼續(xù)學(xué)習(xí)如何使用成熟的語(yǔ)音分類(lèi)模型來(lái)進(jìn)行遷移學(xué)習(xí) 官方教程: 使用 YAMNet 進(jìn)行遷移學(xué)習(xí),用于環(huán)境聲音分類(lèi) 模型下載地址(需要科學(xué)上網(wǎng)): https://tfhub.dev/google/yamnet/1 YAMNet簡(jiǎn)介 YAMNet(

    2024年02月03日
    瀏覽(21)
  • tensorflow2模型保存和恢復(fù)

    tensorflow2模型保存和恢復(fù)

    有兩種方法可以保存模型: ·使用檢查點(diǎn),一種簡(jiǎn)單的在硬盤(pán)上保存變量的方法 ·使用SavedModel,模型結(jié)構(gòu)及檢查點(diǎn) 檢查點(diǎn)不包含任何關(guān)于模型自身的描述:它們只是一種簡(jiǎn)單的存儲(chǔ)參數(shù)并能讓開(kāi)發(fā)者正確恢復(fù)它的方法。 SavedModel格式在保存參數(shù)值的基礎(chǔ)上加上了計(jì)算過(guò)程的序

    2024年02月11日
    瀏覽(25)
  • tensorflow2 模型建立與訓(xùn)練

    模型的構(gòu)建:? tf.keras.Model ?和? tf.keras.layers 模型的損失函數(shù):? tf.keras.losses 模型的優(yōu)化器:? tf.keras.optimizer 模型的評(píng)估:? tf.keras.metrics Keras 有兩個(gè)重要的概念:? 模型(Model) ?和? 層(Layer) ?。層將各種計(jì)算流程和變量進(jìn)行了封裝(例如基本的全連接層,CNN 的卷積層

    2024年02月10日
    瀏覽(25)
  • 【Python機(jī)器學(xué)習(xí)】實(shí)驗(yàn)15 將Lenet5應(yīng)用于Cifar10數(shù)據(jù)集

    【Python機(jī)器學(xué)習(xí)】實(shí)驗(yàn)15 將Lenet5應(yīng)用于Cifar10數(shù)據(jù)集

    CIFAR-10 數(shù)據(jù)集由10個(gè)類(lèi)別的60000張32x32彩色圖像組成,每類(lèi)6000張圖像。有50000張訓(xùn)練圖像和10000張測(cè)試圖像。數(shù)據(jù)集分為五個(gè)訓(xùn)練批次 和一個(gè)測(cè)試批次,每個(gè)批次有10000張圖像。測(cè)試批次包含從每個(gè)類(lèi)別中隨機(jī)選擇的1000張圖像。訓(xùn)練批次包含隨機(jī)順序的剩余圖像,但一些訓(xùn)練批

    2024年02月11日
    瀏覽(14)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包