亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python之tensorflow手把手實例講解貓狗識別實現(xiàn)

 更新時間:2021年09月22日 16:03:07   作者:鑫xing  
要說到深度學(xué)習(xí)圖像分類的經(jīng)典案例之一,那就是貓狗大戰(zhàn)了。貓和狗在外觀上的差別還是挺明顯的,無論是體型、四肢、臉龐和毛發(fā)等等, 都是能通過肉眼很容易區(qū)分的。那么如何讓機器來識別貓和狗呢?網(wǎng)上已經(jīng)有不少人寫過這案例了,我也來嘗試下練練手。

作為tensorflow初學(xué)的大三學(xué)生,本次課程作業(yè)的使用貓狗數(shù)據(jù)集做一個二分類模型。

一,貓狗數(shù)據(jù)集數(shù)目構(gòu)成

train cats:1000 ,dogs:1000
test cats: 500,dogs:500
validation cats:500,dogs:500

二,數(shù)據(jù)導(dǎo)入

train_dir = 'Data/train'
test_dir = 'Data/test'
validation_dir = 'Data/validation'
train_datagen = ImageDataGenerator(rescale=1/255,
                                   rotation_range=10,
                                   width_shift_range=0.2,  #圖片水平偏移的角度
                                   height_shift_range=0.2,  #圖片數(shù)值偏移的角度
                                   shear_range=0.2,  #剪切強度 
                                   zoom_range=0.2,   #隨機縮放的幅度
                                   horizontal_flip=True,   #是否進行隨機水平翻轉(zhuǎn)
#                                    fill_mode='nearest'
                                  )
train_generator = train_datagen.flow_from_directory(train_dir,
                 (224,224),batch_size=1,class_mode='binary',shuffle=False)
test_datagen = ImageDataGenerator(rescale=1/255)
test_generator = test_datagen.flow_from_directory(test_dir,
                 (224,224),batch_size=1,class_mode='binary',shuffle=True)
validation_datagen = ImageDataGenerator(rescale=1/255)
validation_generator = validation_datagen.flow_from_directory(
                validation_dir,(224,224),batch_size=1,class_mode='binary')
print(train_datagen)
print(test_datagen)
print(train_datagen)

三,數(shù)據(jù)集構(gòu)建

我這里是將ImageDataGenerator類里的數(shù)據(jù)提取出來,將數(shù)據(jù)與標簽分別存放在兩個列表,后面在轉(zhuǎn)為np.array,也可以使用model.fit_generator,我將數(shù)據(jù)放在內(nèi)存為了后續(xù)調(diào)參數(shù)時模型訓(xùn)練能更快讀取到數(shù)據(jù),不用每次訓(xùn)練一整輪都去讀一次數(shù)據(jù)(應(yīng)該是這樣的…我是這樣理解…)
注意我這里的數(shù)據(jù)集構(gòu)建后,三種數(shù)據(jù)都是存放在內(nèi)存中的,我電腦內(nèi)存是16g的可以存放下。

train_data=[]
train_labels=[]
a=0
for data_train, labels_train in train_generator:
    train_data.append(data_train)
    train_labels.append(labels_train)
    a=a+1
    if a>1999:
        break
x_train=np.array(train_data)
y_train=np.array(train_labels)
x_train=x_train.reshape(2000,224,224,3)
test_data=[]
test_labels=[]
a=0
for data_test, labels_test in test_generator:
    test_data.append(data_test)
    test_labels.append(labels_test)
    a=a+1
    if a>999:
        break
x_test=np.array(test_data)
y_test=np.array(test_labels)
x_test=x_test.reshape(1000,224,224,3)
validation_data=[]
validation_labels=[]
a=0
for data_validation, labels_validation in validation_generator:
    validation_data.append(data_validation)
    validation_labels.append(labels_validation)
    a=a+1
    if a>999:
        break
x_validation=np.array(validation_data)
y_validation=np.array(validation_labels)
x_validation=x_validation.reshape(1000,224,224,3)

四,模型搭建

model1 = tf.keras.models.Sequential([
    # 第一層卷積,卷積核為,共16個,輸入為150*150*1
    tf.keras.layers.Conv2D(16,(3,3),activation='relu',padding='same',input_shape=(224,224,3)),
    tf.keras.layers.MaxPooling2D((2,2)),
    
    # 第二層卷積,卷積核為3*3,共32個,
    tf.keras.layers.Conv2D(32,(3,3),activation='relu',padding='same'),
    tf.keras.layers.MaxPooling2D((2,2)),
    
    # 第三層卷積,卷積核為3*3,共64個,
    tf.keras.layers.Conv2D(64,(3,3),activation='relu',padding='same'),
    tf.keras.layers.MaxPooling2D((2,2)),
    
    # 數(shù)據(jù)鋪平
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(64,activation='relu'),
    tf.keras.layers.Dropout(0.5),
    tf.keras.layers.Dense(1,activation='sigmoid')
])
print(model1.summary())

模型summary:

在這里插入圖片描述

五,模型訓(xùn)練

model1.compile(optimize=tf.keras.optimizers.SGD(0.00001),
             loss=tf.keras.losses.binary_crossentropy,
             metrics=['acc'])
history1=model1.fit(x_train,y_train,
# 					validation_split=(0~1)   選擇一定的比例用于驗證集,可被validation_data覆蓋
                  validation_data=(x_validation,y_validation),
                  batch_size=10,
                  shuffle=True,
                  epochs=10)
model1.save('cats_and_dogs_plain1.h5')
print(history1)

在這里插入圖片描述

plt.plot(history1.epoch,history1.history.get('acc'),label='acc')
plt.plot(history1.epoch,history1.history.get('val_acc'),label='val_acc')
plt.title('正確率')
plt.legend()

在這里插入圖片描述

可以看到我們的模型泛化能力還是有點差,測試集的acc能達到0.85以上,驗證集卻在0.65~0.70之前跳動。

六,模型測試

model1.evaluate(x_validation,y_validation)

在這里插入圖片描述

最后我們的模型在測試集上的正確率為0.67,可以說還不夠好,有點過擬合,可能是訓(xùn)練數(shù)據(jù)不夠多,后續(xù)可以數(shù)據(jù)增廣或者從驗證集、測試集中調(diào)取一部分數(shù)據(jù)用于訓(xùn)練模型,可能效果好一些。

到此這篇關(guān)于python之tensorflow手把手實例講解貓狗識別實現(xiàn)的文章就介紹到這了,更多相關(guān)python tensorflow 貓狗識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pandas將列表(List)轉(zhuǎn)換為數(shù)據(jù)框(Dataframe)

    Pandas將列表(List)轉(zhuǎn)換為數(shù)據(jù)框(Dataframe)

    這篇文章主要介紹了Pandas將列表(List)轉(zhuǎn)換為數(shù)據(jù)框(Dataframe),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python多線程與異步處理在HTTP請求中的應(yīng)用方式

    Python多線程與異步處理在HTTP請求中的應(yīng)用方式

    這篇文章主要介紹了Python多線程與異步處理在HTTP請求中的應(yīng)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 基于sklearn實現(xiàn)Bagging算法(python)

    基于sklearn實現(xiàn)Bagging算法(python)

    這篇文章主要為大家詳細介紹了基于sklearn實現(xiàn)Bagging算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python繪圖方法實例入門

    python繪圖方法實例入門

    這篇文章主要介紹了python繪圖方法,實例分析了Python的繪圖技巧,涉及Python中matplotlib模塊的使用方法,需要的朋友可以參考下
    2015-05-05
  • Python Pygame實現(xiàn)兔子獵人守護城堡游戲

    Python Pygame實現(xiàn)兔子獵人守護城堡游戲

    這篇文章主要介紹了用python來制作的一個守護類小游戲兔子獵人守護城堡,文中的示例代碼介紹得很詳細,感興趣的小伙伴快來跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • Python如何求取逆序數(shù)

    Python如何求取逆序數(shù)

    這篇文章主要介紹了Python如何求取逆序數(shù)問題,具有很好的參考價值,希望大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • python3.5 cv2 獲取視頻特定幀生成jpg圖片

    python3.5 cv2 獲取視頻特定幀生成jpg圖片

    這篇文章主要為大家詳細介紹了python3.5 cv2 獲取視頻特定幀生成jpg圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • Django分頁功能的實現(xiàn)代碼詳解

    Django分頁功能的實現(xiàn)代碼詳解

    在本篇文章里小編給大家整理了關(guān)于Django分頁功能的實現(xiàn)代碼以及相關(guān)知識點內(nèi)容,需要的朋友們可以跟著學(xué)習(xí)參考下。
    2019-07-07
  • 利用python實現(xiàn)終身免費的聽書工具

    利用python實現(xiàn)終身免費的聽書工具

    本文通過實際案例,詳細介紹了作者如何利用Python庫實現(xiàn)文本轉(zhuǎn)語音的過程,從安裝庫到實際操作案例,都有詳細的說明,為讀者提供了一定的參考價值
    2024-03-03
  • Python中字典及遍歷常用函數(shù)的使用詳解

    Python中字典及遍歷常用函數(shù)的使用詳解

    這篇文章主要為大家介紹了Python中字典有關(guān)的常見函數(shù)的使用方法,以及字典遍歷的方法。文中通過示例代碼為我們進行了詳細介紹,對學(xué)習(xí)Python字典有一定幫助,需要的可以參考一下
    2022-06-06

最新評論