五、項目實戰---識別人和馬

一、準備訓練數據

下載數據集

validation驗證集
train訓練集

數據集結構如下:在這里插入圖片描述
將數據集解壓到自己選擇的目錄下就行
最后的結構效果如下:在這里插入圖片描述

二、構建模型

ImageDataGenerator

真實數據中,往往圖片尺寸大小不一,需要裁剪成一樣大小,一般為正方形
數據量比較大,不能一下子全部裝入內存中
經常需要進行修改參數,比如輸出的尺寸,增補圖像拉伸等

from tensorflow import keras
import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
#創建兩個數據生成器,指定scaling范圍為0-1
train_datagen = ImageDataGenerator(rescale=1/255)
validation_datagen = ImageDataGenerator(rescale=1/255)#將train_datagen數據生成器指向數據集所在文件夾
train_generator = train_datagen.flow_from_directory(r'.\images\training',#訓練集所在文件夾target_size=(300,300),#指定輸出尺寸batch_size=32,class_mode='binary'#指定二分類
)
#Found 1027 images belonging to 2 classes.#將validation_datagen數據生成器指向數據集所在文件夾
validation_generator = validation_datagen.flow_from_directory(r'.\images\validation',#驗證集所在文件夾target_size=(300,300),#指定輸出尺寸batch_size=32,class_mode='binary'#指定二分類
)
#Found 256 images belonging to 2 classes.

三、訓練模型

model = tf.keras.models.Sequential()model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(300,300,3)))
model.add(tf.keras.layers.MaxPooling2D(2,2))
model.add(tf.keras.layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)))
model.add(tf.keras.layers.MaxPooling2D(2,2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(1,activation='sigmoid'))model.compile(optimizer=RMSprop(lr=0.001),loss="binary_crossentropy",metrics=['accuracy'])model.fit(train_generator,epochs=20,validation_data = validation_generator)"""
Epoch 1/20
8/8 [==============================] - 8s 996ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 136s 4s/step - loss: 7.4488 - acc: 0.5151 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 2/20
8/8 [==============================] - 8s 968ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 136s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 3/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 141s 4s/step - loss: 7.6964 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 4/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 143s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 5/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 145s 4s/step - loss: 7.5547 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 6/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 144s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 7/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 146s 4s/step - loss: 7.5547 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 8/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 144s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 9/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 144s 4s/step - loss: 7.6964 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 10/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 144s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 11/20
8/8 [==============================] - 8s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 143s 4s/step - loss: 7.6964 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 12/20
8/8 [==============================] - 8s 982ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 138s 4s/step - loss: 7.6964 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 13/20
8/8 [==============================] - 8s 968ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 135s 4s/step - loss: 7.6964 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 14/20
8/8 [==============================] - 8s 974ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 135s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 15/20
8/8 [==============================] - 8s 971ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 135s 4s/step - loss: 7.6964 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 16/20
8/8 [==============================] - 8s 972ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 135s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 17/20
8/8 [==============================] - 8s 983ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 135s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 18/20
8/8 [==============================] - 8s 976ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 136s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 19/20
8/8 [==============================] - 8s 969ms/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 134s 4s/step - loss: 7.8380 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
Epoch 20/20
8/8 [==============================] - 9s 1s/step - loss: 7.9712 - acc: 0.5000
33/33 [==============================] - 137s 4s/step - loss: 7.5547 - acc: 0.5131 - val_loss: 7.9712 - val_acc: 0.5000
"""

四、優化參數

import os
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
from kerastuner.tuners import Hyperband
from kerastuner.engine.hyperparameters import HyperParameters#創建兩個數據生成器,指定scaling范圍為0-1
train_datagen = ImageDataGenerator(rescale=1/255)
validation_datagen = ImageDataGenerator(rescale=1/255)#將train_datagen數據生成器指向數據集所在文件夾
train_generator = train_datagen.flow_from_directory(r'.\images\training',#訓練集所在文件夾target_size=(150,150),#指定輸出尺寸batch_size=32,class_mode='binary'#指定二分類
)#將validation_datagen數據生成器指向數據集所在文件夾
validation_generator = validation_datagen.flow_from_directory(r'.\images\validation',#驗證集所在文件夾target_size=(150,150),#指定輸出尺寸batch_size=32,class_mode='binary'#指定二分類
)hp = HyperParameters()def build_model(hp):model = tf.keras.models.Sequential()model.add(tf.keras.layers.Conv2D(hp.Choice('num_filters_layer0',values=[16,64],default=16),(3,3),activation='relu',input_shape=(150,150,3))),model.add(tf.keras.layers.MaxPooling2D(2,2)),for i in range(hp.Int("num_conv_layers",1,3)):model.add(tf.keras.layers.Conv2D(hp.Choice(f'num_filters_layer{i}',values=[16,64],default=16),(3,3),activation='relu')),model.add(tf.keras.layers.MaxPooling2D(2,2)),model.add(tf.keras.layers.Conv2D(64,(3,3),activation='relu')),model.add(tf.keras.layers.MaxPooling2D(2,2)),model.add(tf.keras.layers.Flatten()),model.add(tf.keras.layers.Dense(hp.Int("hidden_units",128,512,step=32),activation='relu')),model.add(tf.keras.layers.Dense(1,activation='sigmoid'))#是否,一個神經元就行model.compile(optimizer=RMSprop(lr=0.001),loss="binary_crossentropy",metrics=['accuracy'])return modeltuner = Hyperband(#將訓練好的參數存放起來build_model,objective='val_acc',max_epochs=15,directory='horse_human_params',hyperparameters=hp,project_name='my_horse_human_project'
)tuner.search(train_generator,epochs=10,validation_data=validation_generator)
"""
Trial 13 Complete [00h 02m 13s]
val_acc: 0.87109375Best val_acc So Far: 0.890625
Total elapsed time: 00h 14m 22sSearch: Running Trial #14Value             |Best Value So Far |Hyperparameter
16                |64                |num_filters_layer0
5                 |2                 |tuner/epochs
2                 |0                 |tuner/initial_epoch
2                 |2                 |tuner/bracket
1                 |0                 |tuner/round
0000              |None              |tuner/trial_id
"""

在這里插入圖片描述

best_hps = tuner.get_best_hyperparameters(1)[0]#根據最優,把模型構建出來
print(best_hps.values)
"""
{'num_filters_layer0': 64, 'num_conv_layers': 2, 'hidden_units': 256, 'num_filters_layer1': 16, 'num_filters_layer2': 64, 'tuner/epochs': 2, 'tuner/initial_epoch': 0, 'tuner/bracket': 2, 'tuner/round': 0}
"""
model = tuner.hypermodel.build(best_hps)
model.summary()
"""
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 148, 148, 64)      1792      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 74, 74, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 72, 72, 64)        36928     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 36, 36, 64)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 34, 34, 16)        9232      
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 17, 17, 16)        0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 15, 15, 64)        9280      
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 7, 7, 64)          0         
_________________________________________________________________
flatten (Flatten)            (None, 3136)              0         
_________________________________________________________________
dense (Dense)                (None, 256)               803072    
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 257       
=================================================================
Total params: 860,561
Trainable params: 860,561
Non-trainable params: 0
_________________________________________________________________
"""

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/377637.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377637.shtml
英文地址,請注明出處:http://en.pswp.cn/news/377637.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode 122. 買賣股票的最佳時機 II 思考分析

目錄題目貪心法題目 給定一個數組,它的第 i 個元素是一支給定股票第 i 天的價格。 設計一個算法來計算你所能獲取的最大利潤。你可以盡可能地完成更多的交易(多次買賣一支股票)。 注意:你不能同時參與多筆交易(你必…

css設置a連接禁用樣式_使用CSS禁用鏈接

css設置a連接禁用樣式Question: 題: Links are one of the most essential aspects of any web page or website. They play a very important role in making our website or web page quite responsive or interactive. So the topic for discussion is quite pe…

服務器出現 HTTP 錯誤代碼,及解決方法

HTTP 400 - 請求無效 HTTP 401.1 - 未授權:登錄失敗 HTTP 401.2 - 未授權:服務器配置問題導致登錄失敗 HTTP 401.3 - ACL 禁止訪問資源 HTTP 401.4 - 未授權:授權被篩選器拒絕 HTTP 401.5 - 未授權:ISAPI 或 CGI 授權失敗 HTTP 40…

leetcode 55. 跳躍游戲 思考分析

題目 給定一個非負整數數組,你最初位于數組的第一個位置。 數組中的每個元素代表你在該位置可以跳躍的最大長度。 判斷你是否能夠到達最后一個位置。 示例1: 輸入: [2,3,1,1,4] 輸出: true 解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1…

六、項目實戰---識別貓和狗

一、準備數據集 kagglecatsanddogs網上一搜一大堆,這里我就不上傳了,需要的話可以私信 導包 import os import zipfile import random import shutil import tensorflow as tf from tensorflow.keras.optimizers import RMSprop from tensorflow.kera…

修改shell終端提示信息

PS1:就是用戶平時的提示符。PS2:第一行沒輸完,等待第二行輸入的提示符。公共設置位置:/etc/profile echo $PS1可以看到當前提示符設置例如:顯示綠色,并添加時間和shell版本export PS1"\[\e[32m\][\uyou are right…

java 字謎_計算字謎的出現次數

java 字謎Problem statement: 問題陳述: Given a string S and a word C, return the count of the occurrences of anagrams of the word in the text. Both string and word are in lowercase letter. 給定一個字符串S和一個單詞C ,返回該單詞在文本…

Origin繪制熱重TG和微分熱重DTG曲線

一、導入數據 二、傳到Origin中 三、熱重TG曲線 temp為橫坐標、mass為縱坐標 繪制折線圖 再稍微更改下格式 字體加粗,Times New Roman 曲線寬度設置為2 橫縱坐標數值格式為Times New Roman 根據實際情況改下橫縱坐標起始結束位置 四、微分熱重DTG曲線 點擊曲線…

【嵌入式系統復習】嵌入式網絡與協議棧

目錄開放式系統互連模型總線通信的報文組形式以及傳遞方式報文組形式報文傳遞方式網絡分配與調度嵌入式TCP/IP藍牙技術藍牙的節能狀態糾錯方案藍牙協議棧開放式系統互連模型 ISO/OSI七層模型展示了網絡結構與各層的功能。 應用層: 提供了終端用戶程序和網絡之間的應…

代碼兼容、技巧

代碼兼容、技巧 前端開發中,一個頭疼的事,就是代碼的不兼容,這里貼出自己在前端開發中的一些解決經驗。除了其瀏覽器本身的BUG外,不建議使用CSS hack來解決兼容性問題的。 IE和FF下對”li“的的高度解析不同 可以不定義高度&#…

Windows Phone 7 自定義事件

在Windows Phone的應用開發里面,對于事件這種東西我們可以隨處可見,系統本來就已經封裝好了各種各樣的事件機制,如按鈕的單擊事件等等的。在實際的開發中,我們需要自己去給相關的類自定義一些事件來滿足業務的要求,特別…

getcwd函數_PHP getcwd()函數與示例

getcwd函數PHP getcwd()函數 (PHP getcwd() function) The full form of getcwd is "Get Current Working Directory", the function getcwd() is used to get the name of the current working directory, it does not accept any parameter and returns the curren…

十四、數據庫的導出和導入的兩種方法

一、以SQL腳本格式導出(推薦) 導出 右擊需要導出的數據庫,任務—>生成腳本 下一步 選擇要導出的數據庫,下一步 內容根據需求修改,沒啥需求直接下一步 勾選 表 勾選需要導出的數據庫中的表 選擇腳本保存的路…

Apache中 RewriteCond 規則參數介紹

RewriteCond就像我們程序中的if語句一樣,表示如果符合某個或某幾個條件則執行RewriteCond下面緊鄰的RewriteRule語句,這就是RewriteCond最原始、基礎的功能,為了方便理解,下面來看看幾個例子。RewriteEngine onRewriteCond %{HTT…

【C++grammar】文件I/O流的基本用法

目錄1、輸入輸出類介紹1.C/C文件操作對比2.什么是流?3.C I/O流類層次4.帶緩沖的輸入輸出5.gcc編譯器cin.in_avail()2、向文件寫入數據1.寫文件小練習2.如何將信息同時輸出到文件和屏幕?3、從文件讀數據1.檢測文件是否成功打開2.檢測是否已到文件末尾3.讀…

作業2 分支循環結構

書本第39頁 習題2 1.輸入2個整數num1和num2.計算并輸出它們的和&#xff0c;差&#xff0c;積&#xff0c;商&#xff0c;余數。 //輸入2個整數num1和num2.計算并輸出它們的和&#xff0c;差&#xff0c;積&#xff0c;商&#xff0c;余數。//#include<stdio.h> int main…

求一個序列中最大的子序列_最大的斐波那契子序列

求一個序列中最大的子序列Problem statement: 問題陳述&#xff1a; Given an array with positive number the task to find the largest subsequence from array that contain elements which are Fibonacci numbers. 給定一個具有正數的數組&#xff0c;任務是從包含菲波納…

十三、系統優化

系統整體框架圖 程序運行進入紡織面料庫存管理系統主頁面 用戶子系統功能演示&#xff1a; 1&#xff0c;點擊用戶登錄進入用戶登錄頁面&#xff0c;可以注冊和找回密碼 2&#xff0c;注冊新用戶&#xff0c;賬號、密碼、性別、手機號均有限制&#xff0c;用戶注冊需要按指定…

時間工具類[DateUtil]

View Code 1 package com.ly.util;2 3 import java.text.DateFormat;4 import java.text.ParseException;5 import java.text.SimpleDateFormat;6 import java.util.Calendar;7 import java.util.Date;8 9 /**10 * 11 * 功能描述12 * 13 * authorAdministrator14 * Date Jul 19…

JQuery delegate多次綁定的解決辦法

我用delegate來控制分頁&#xff0c;查詢的時候會造成多次綁定 //前一頁、后一頁觸發 1 $("body").delegate("#tableFoot a:not(a.btn)", "click", function () { 2 _options.page $(this).attr("page"); 3 loadTmpl(_option…