TensorFlow2.1 模型訓練使用

文章目錄

  • 1、環境安裝搭建
  • 2、神經網絡
    • 2.1、解決線性問題
    • 2.2、FAshion MNIST數據集使用
  • 3、卷積神經網絡
    • 3.1、卷積神經網絡使用
    • 3.2、ImageDataGenerator使用
    • 3.3、貓狗識別案例
    • 3.4、參數優化

1、環境安裝搭建

鏈接: Windows 安裝Tensorflow2.1、Pycharm開發環境

2、神經網絡

1、傳統方式解決問題
在這里插入圖片描述
2、機器學習解決方式
在這里插入圖片描述
在這里插入圖片描述

2.1、解決線性問題

下面通過兩組數據推導出公式:
-1.0, 0.0, 1.0, 2.0, 3.0, 4.0
-3.0, -1.0, 1.0, 3.0, 5.0, 7.0
很明顯是一個線性問題,y=2x-1,下面我們通過tensorflow來解決這個問題,輸入當x=10的時候求y的值?

import tensorflow as tf
from tensorflow import keras
import numpy as npdef tensor_test1():# layers表示的是一層神經元,units表示這一層里面只有一個。input_shape輸入值model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])# 指定優化和損失函數model.compile(optimizer='sgd', loss='mean_squared_error')xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)# epochs 表示訓練次數model.fit(xs, ys, epochs=500)# y = 2x-1# 通過模型去檢測x=10的時候,y等于多少print(model.predict([10.0]))if __name__ == '__main__':tensor_test1()

通過結果可以看出,是一個很接近的值

在這里插入圖片描述

2.2、FAshion MNIST數據集使用

在這里插入圖片描述

700000張圖片
10個類別
28*28
訓練神經元網絡
通過tensorflow進行模型構建,通過構建出來的模型對圖片進行識別

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt# 使用fashion數據集
# 自動終止
# 深度學習是不是訓練的次數越多越好呢,不是次數太多會出現一些過擬合問題,就是做的題目都認識,但是新題目不會
# 所以我們需要通過callback來對他進行終止
class myCallbcak(tf.keras.callbacks.Callback):def on_epoch_end(self, epoch, logs={}):if (logs.get('loss') < 0.4):print("\nloss is low so cancelling training!")self.model.stop_training = Truedef tensor_Fashion():callbacks = myCallbcak()fashion_mnist = keras.datasets.fashion_mnist# 訓練數據集,每張圖片對應的標簽   測試用的圖片  測試用的標簽(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()# print(train_images.shape)# plt.imshow(train_images[0])# 構造模型# 構造一個三層結構,第一層用來接收輸入,中間層有512個神經元,這個是任意的,最后層,我們要分的類別有10model = keras.Sequential([keras.layers.Flatten(input_shape=(28, 28)),keras.layers.Dense(512, activation=tf.nn.relu),keras.layers.Dense(10, activation=tf.nn.softmax)])model.summary()# 歸一化,更準確train_images_scaled = train_images / 255.0# 指定優化model.compile(optimizer='adam', loss=tf.losses.sparse_categorical_crossentropy, metrics=['accuracy'])model.fit(train_images_scaled, train_labels, epochs=100, callbacks=[callbacks])test_images_scaled = test_images / 255.0model.evaluate(test_images_scaled, test_labels)# 判斷單張圖片的屬于哪個類別print(model.predict([[test_images[0] / 255]]))# 打印出標簽print(np.argmax(model.predict([[test_images[0] / 255]])))print(test_labels[0])

3、卷積神經網絡

3.1、卷積神經網絡使用

通過卷積神經網絡對FAshion MNIST數據集進行訓練,得出的準確率比神經網絡的更準確,當時也更耗時

import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as pltdef convolution_nerve():fashion_mnist = keras.datasets.fashion_mnist(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()# 構造模型model = keras.Sequential([keras.layers.Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1)),keras.layers.MaxPooling2D(2, 2),keras.layers.Conv2D(64, (3, 3), activation='relu'),keras.layers.MaxPooling2D(2, 2),keras.layers.Flatten(),keras.layers.Dense(128, activation='relu'),keras.layers.Dense(10, activation='softmax')])model.summary()# 歸一化train_images_scaled = train_images / 255.0# 指定優化model.compile(optimizer='adam', loss=tf.losses.sparse_categorical_crossentropy, metrics=['accuracy'])model.fit(train_images_scaled.reshape(-1, 28, 28, 1), train_labels, epochs=5)if __name__ == '__main__':convolution_nerve()

模型結構

1層卷積層
輸入是2828,過濾器是33,最后會去掉兩個像素,所以是2626,64是過濾器,經過第一次卷積就變成64張圖片了,(33+1)64=640
2池化層
尺寸減少原來的1/4,長寬各自減去一半
2層卷積層
(3
3*64+1)*64=36928

在這里插入圖片描述
第一層卷積層
在這里插入圖片描述
max pooling
在這里插入圖片描述

3.2、ImageDataGenerator使用

1、 真實數據做處理
2、圖片尺寸大小不一,需要裁成一樣大小
3、數據量比較大,不能一下載裝入內容
4、經常需要修改參數,列入尺寸
使用ImageDataGenerator對圖片做處理

from tensorflow.keras.preprocessing.image import ImageDataGenerator# 創建兩個數據生成器,指定scaling否為0-1
train_datagen = ImageDataGenerator(rescale=1 / 255)
validation_datagen = ImageDataGenerator(rescale=1 / 255)# 指向訓練數據文件夾
train_genrator = train_datagen.flow_from_directory('/',  # 訓練數據所在文件夾target_size=(300, 300),  # 指定輸出尺寸batch_size=32,  # 每次提取多少class_mode='binary'  # 指定二分類
)validation_genrator = validation_datagen.flow_from_directory('/',  # 訓練數據所在文件夾target_size=(300, 300),  # 指定輸出尺寸batch_size=32,  # 每次提取多少class_mode='binary'  # 指定二分類
)

3.3、貓狗識別案例

圖片資源下載:https://download.csdn.net/download/weixin_45715405/88226536

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import os
import tensorflow as tf
from tensorflow import keras
import numpy as np
def dogs_cats():base_dir = 'E:\\BaiduNetdiskDownload\\06.TensorFlow框架課件資料\\Tensorflow課件資料\\貓狗識別項目實戰\\貓狗識別\\貓狗識別\data\\cats_and_dogs'train_dir = os.path.join(base_dir, 'train')validation_dir = os.path.join(base_dir, 'validation')# 訓練集train_cats_dir = os.path.join(train_dir, 'cats')train_dogs_dir = os.path.join(train_dir, 'dogs')# 驗證集validation_cats_dir = os.path.join(validation_dir, 'cats')validation_dogs_dir = os.path.join(validation_dir, 'dogs')model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(16, (3, 3), activation='relu', input_shape=(64, 64, 3)),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512, activation='relu'),tf.keras.layers.Dense(1, activation='sigmoid')  # 如果是多分類用softmax,2分類用sigmoid就可以了])# 設置損失函數,優化函數model.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['acc'])# 數據預處理# 都進來的數據會被自動轉換成tensor(float32)格式,分別準備訓練和驗證# 圖像數據歸一化(0-1)區間train_datagen = ImageDataGenerator(rescale=1. / 255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest')test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory(train_dir,  # 文件夾路徑target_size=(64, 64),  # 指定resize的大小batch_size=20,# 如果one-hot就是categorical,二分類用binary就可以class_mode='binary')validation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(64, 64),batch_size=20,class_mode='binary')# 訓練網絡模型# 直接fit也可以,但是通常不能把所有數據全部放入內存,fit_generator相當于一個生成器,動態產生所需的batch數據# steps_per_epoch相當給定一個停止條件,因為生成器會不斷產生batch數據,說白了就是它不知道一個epoch里需要執行多少個stephistory = model.fit_generator(train_generator,steps_per_epoch=100,epochs=5,validation_data=validation_generator,validation_steps=50,verbose=2)

3.4、參數優化

安裝

pip3 install keras-tuner
優化之后的參數版本

from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import os
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_genrator = train_datagen.flow_from_directory(
#     'E:\\BaiduNetdiskDownload\\06.TensorFlow框架課件資料\\Tensorflow課件資料\\貓狗識別項目實戰\\貓狗識別\\貓狗識別\data\\cats_and_dogs\\train',  # 訓練數據所在文件夾
#     target_size=(300, 300),  # 指定輸出尺寸
#     batch_size=32,  # 每次提取多少
#     class_mode='binary'  # 指定二分類
# )
#
# validation_genrator = validation_datagen.flow_from_directory(
#     'E:\\BaiduNetdiskDownload\\06.TensorFlow框架課件資料\\Tensorflow課件資料\\貓狗識別項目實戰\\貓狗識別\\貓狗識別\data\\cats_and_dogs\\validation',  # 訓練數據所在文件夾
#     target_size=(300, 300),  # 指定輸出尺寸
#     batch_size=32,  # 每次提取多少
#     class_mode='binary'  # 指定二分類
# )hp = HyperParameters()def dogs_cats(hp):model = tf.keras.models.Sequential()# values 指定范圍model.add(tf.keras.layers.Conv2D(hp.Choice('num_filters_layer0', values=[16, 64], default=16),(3, 3), activation='relu',input_shape=(64, 64, 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.Flatten())model.add(tf.keras.layers.Dense(hp.Int('hidde_units', 128, 512, step=32), activation='relu'))model.add(tf.keras.layers.Dense(1, activation='sigmoid'))  # 如果是多分類用softmax,2分類用sigmoid就可以了# 設置損失函數,優化函數model.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['acc'])return modelbase_dir = 'E:\\BaiduNetdiskDownload\\06.TensorFlow框架課件資料\\Tensorflow課件資料\\貓狗識別項目實戰\\貓狗識別\\貓狗識別\data\\cats_and_dogs'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')# 訓練集
train_cats_dir = os.path.join(train_dir, 'cats')
train_dogs_dir = os.path.join(train_dir, 'dogs')# 驗證集
validation_cats_dir = os.path.join(validation_dir, 'cats')
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
# 數據預處理
# 都進來的數據會被自動轉換成tensor(float32)格式,分別準備訓練和驗證
# 圖像數據歸一化(0-1)區間
train_datagen = ImageDataGenerator(rescale=1. / 255,rotation_range=40,width_shift_range=0.2,height_shift_range=0.2,shear_range=0.2,zoom_range=0.2,horizontal_flip=True,fill_mode='nearest'
)
test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory(train_dir,  # 文件夾路徑target_size=(64, 64),  # 指定resize的大小batch_size=20,# 如果one-hot就是categorical,二分類用binary就可以class_mode='binary'
)
validation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(64, 64),batch_size=20,class_mode='binary'
)# 訓練網絡模型
# 直接fit也可以,但是通常不能把所有數據全部放入內存,fit_generator相當于一個生成器,動態產生所需的batch數據
# steps_per_epoch相當給定一個停止條件,因為生成器會不斷產生batch數據,說白了就是它不知道一個epoch里需要執行多少個step
# history = model.fit_generator(
#     train_generator,
#     steps_per_epoch=100,
#     epochs=5,
#     validation_data=validation_generator,
#     validation_steps=50,
#     verbose=2)tuner = Hyperband(dogs_cats,objective='val_acc',max_epochs=15,directory='dog_cats_params',hyperparameters=hp,project_name='my_dog_cat_project'
)
tuner.search(train_generator, epochs=10, validation_data=validation_generator)# 查看參數情況
best_hps = tuner.get_best_hyperparameters(1)[0]
print(best_hps.values)
# 通過參數將模型構建出來
model = tuner.hypermodel.build(best_hps)
model.summary()

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

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

相關文章

【數據結構】堆(Heap)

一、堆的概念及結構 1、概念 堆(Heap)是計算機科學中一類特殊的數據結構的統稱。堆通常是一個可以被看做一棵 完全二叉樹的 數組對象。 堆是非線性數據結構&#xff0c;相當于一維數組&#xff0c;有兩個直接后繼。 如果有一個關鍵碼的集合K { k?&#xff0c;k?&#xff0c…

“深入解析JVM:探索Java虛擬機的內部工作原理“

標題&#xff1a;深入解析JVM&#xff1a;探索Java虛擬機的內部工作原理 摘要&#xff1a;本文將深入解析Java虛擬機&#xff08;JVM&#xff09;的內部工作原理&#xff0c;包括類加載、內存管理、垃圾回收、即時編譯等關鍵概念。通過對這些概念的詳細講解和示例代碼的演示&a…

關于openfeign調用時content-type的問題

問題1描述&#xff1a; 今天在A服務使用openfeign調用B服務的時候&#xff0c;發現經常會偶發性報錯。錯誤如下&#xff1a; 情況為偶發&#xff0c;很讓人頭疼。 兩個接口如下&#xff1a; A服務接口&#xff1a; delayReasonApi.test(student);就是使用openfeign調用B服務的…

K8S常用命令

1.1 查看集群信息&#xff1a; kubectl cluster-info: 顯示集群信息。 kubectl config view: 顯示當前kubectl配置信息。1.2 查看資源狀態&#xff1a; kubectl get pods: 查看所有Pod的狀態。 kubectl get deployments: 查看所有部署的狀態。 kubectl get services: 查看所有…

Php“牽手”shopee商品詳情頁數據采集方法,shopeeAPI接口申請指南

shopee詳情接口 API 是開放平臺提供的一種 API 接口&#xff0c;它可以幫助開發者獲取商品的詳細信息&#xff0c;包括商品的標題、描述、圖片等信息。在電商平臺的開發中&#xff0c;詳情接口API是非常常用的 API&#xff0c;因此本文將詳細介紹詳情接口 API 的使用。 一、sh…

Python接口自動化之request請求封裝

我們在做自動化測試的時候&#xff0c;大家都是希望自己寫的代碼越簡潔越好&#xff0c;代碼重復量越少越好。那么&#xff0c;我們可以考慮將request的請求類型&#xff08;如&#xff1a;Get、Post、Delect請求&#xff09;都封裝起來。這樣&#xff0c;我們在編寫用例的時候…

Python文件操作教程,Python文件操作筆記

文件的打開與關閉 想一想&#xff1a; 如果想用word編寫一份簡歷&#xff0c;應該有哪些流程呢&#xff1f; 打開word軟件&#xff0c;新建一個word文件寫入個人簡歷信息保存文件關閉word軟件 同樣&#xff0c;在操作文件的整體過程與使用word編寫一份簡歷的過程是很相似的…

爬蟲逆向實戰(十三)--某課網登錄

一、數據接口分析 主頁地址&#xff1a;某課網 1、抓包 通過抓包可以發現登錄接口是user/login 2、判斷是否有加密參數 請求參數是否加密&#xff1f; 通過查看“載荷”模塊可以發現有一個password加密參數&#xff0c;還有一個browser_key這個可以寫死不需要關心 請求頭…

【11】Redis學習筆記 (微軟windows版本)【Redis】

注意:官redis方不支持windows版本 只支持linux 此筆記是依托微軟開發windows版本學習 一、前言 Redis簡介&#xff1a; Redis&#xff08;Remote Dictionary Server&#xff09;是一個開源的內存數據結構存儲系統&#xff0c;它也被稱為數據結構服務器。Redis以鍵值對&am…

取證的學習

Volatility命令語法 1.判斷鏡像信息&#xff0c;獲取操作系統類型 Volatility -f xxx.vmem imageinfo 在查到操作系統后如果不確定可以使用以下命令查看 volatility - f xxx.vmem --profile [操作系統] volshell 2.知道操作系統類型后&#xff0c;用–profile指定 volat…

IO和文件系統性能分析工具

以下內容來自于RHEL 官方文檔。以下工具可以用來分析磁盤 IO 和文件系統性能瓶頸。 分析方法見 《性能分析方法-《性能之巔》筆記》&#xff0c;USE 法必須要使用相關性能分析工具。 影響 IO 和文件系統性能的主要因素&#xff1a; 數據寫入或讀取特征 順序或隨機 buffered 或…

基于ssm+mysql智能圖書館導航系統設計與實現

摘 要 電腦的出現是一個時代的進步&#xff0c;不僅僅幫助人們解決了一些數學上的難題&#xff0c;如今電腦的出現&#xff0c;更加方便了人們在工作和生活中對于一些事物的處理。應用的越來越廣泛&#xff0c;通過互聯網我們可以更方便地進行辦公&#xff0c;也能夠在網上就能…

【Oracle 數據庫 SQL 語句 】積累1

Oracle 數據庫 SQL 語句 1、分組之后再合計2、顯示不為空的值 1、分組之后再合計 關鍵字&#xff1a; grouping sets &#xff08;&#xff08;分組字段1&#xff0c;分組字段2&#xff09;&#xff0c;&#xff08;&#xff09;&#xff09; select sylbdm ,count(sylbmc) a…

神經網絡基礎-神經網絡補充概念-20-激活函數

概念 激活函數是神經網絡中的一個重要組成部分&#xff0c;它引入了非線性性質&#xff0c;使得神經網絡可以學習和表示更復雜的函數關系。激活函數對于將輸入信號轉換為輸出信號起到了關鍵作用&#xff0c;它在神經元的計算過程中引入了非線性變換。 幾種常見的激活函數及其…

DR模式 LVS負載均衡群集

數據包流向分析&#xff1a; &#xff08;1&#xff09;客戶端發送請求到 Director Server&#xff08;負載均衡器&#xff09;&#xff0c;請求的數據報文&#xff08;源 IP 是 CIP,目標 IP 是 VIP&#xff09;到達內核空間。 &#xff08;2&#xff09;Director Server 和 Re…

Docker 網絡

目錄 Docker 網絡實現原理 Docker 的網絡模式&#xff1a; 網絡模式詳解&#xff1a; 1&#xff0e;host模式 2&#xff0e;container模式 3&#xff0e;none模式 4&#xff0e;bridge模式 5&#xff0e;自定義網絡 Docker 網絡實現原理 Docker使用Linux橋接&#x…

Linux下如何修改CPU 電源工作模式

最近處理一起歷史遺留問題&#xff0c;感覺很爽。 現象&#xff1a; 背景&#xff1a;設備采用ARM&#xff0c;即rk3568處理器&#xff0c;采用Linux系統&#xff1b;主要用于視覺后端處理 現象&#xff1a;當軟件運行一段時間&#xff0c;大概1個小時&#xff08;也不是很固定…

考研算法第46天: 字符串轉換整數 【字符串,模擬】

題目前置知識 c中的string判空 string Count; Count.empty(); //正確 Count ! null; //錯誤c中最大最小宏 #include <limits.h>INT_MAX INT_MIN 字符串使用發運算將字符加到字符串末尾 string Count; string str "liuda"; Count str[i]; 題目概況 AC代碼…

國內的PMP有多少含金量?

1.PMP是什么 PMP&#xff08;Project Management Professional&#xff09;指項目管理專業人士資格認證。它是由美國項目管理協會&#xff08;PMI&#xff09;舉辦的項目管理專業人員&#xff08;PMP&#xff09;認證考試&#xff0c;在全球190多個國家和地區推廣&#xff0c;…

vue 數字遞增(滾動從0到)

使用 html <Incremental :startVal"0" :endVal"1000" :duration"500" />js&#xff1a; import Incremental from /utils/num/numViewjs let lastTime 0 const prefixes webkit moz ms o.split( ) // 各瀏覽器前綴let requestAnimatio…