1. 程式人生 > >【小白學PyTorch】15 TF2實現一個簡單的服裝分類任務

【小白學PyTorch】15 TF2實現一個簡單的服裝分類任務

【新聞】:機器學習煉丹術的粉絲的人工智慧交流群已經建立,目前有目標檢測、醫學影象、時間序列等多個目標為技術學習的分群和水群嘮嗑的總群,歡迎大家加煉丹兄為好友,加入煉丹協會。微信:cyx645016617. 參考目錄: [TOC] ## 0 為什麼學TF 之前的15節課的pytorch的學習,應該是讓不少朋友對PyTorch有了一個全面而深刻的認識了吧 **(如果你認真跑程式碼了並且認真看文章了的話)** 。 大家都會比較Tensorflow2和pytorch之間孰優孰劣,但是我們也並**不是非要二者選一**,兩者都是深度學習的工具,其實我們或多或少應該瞭解一些比較好。 就好比,PyTorch是衝鋒槍,TensorFlow是步槍,在上戰場前,我們可以選擇帶上衝鋒槍還是步槍,但是在戰場上,可能手中的槍支沒有子彈了,你只能在地上隨便撿了一把槍。 很多時候,用Pytorch還是Tensorflow的選擇權不在自己。 此外,瞭解了TensorFlow,大家才能更好的理解PyTorch和TF究竟有什麼區別。我見過有的大佬是TF和PyTorch一起用在一個專案中,資料讀取用PyTorch然後模型用TF構建。 總之,大家有時間有精力的話,順便學學TF也不虧,更何況TF2.0現在已經優化了很多。本系列預計用3節課來簡單的入門一下Tensorflow2. 和PyTorch的第一課一樣,我們直接做一個簡單的小實戰。~~MNIST手寫數字分類~~,Fashion MNIST時尚服裝分類。 ![](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/14d81bfea33f4acbaa0d2a3f31280e8b~tplv-k3u1fbpfcp-zoom-1.image) ## 1 Tensorflow的安裝 安裝TensorFlow的方法很簡單,就是在控制檯執行: ``` pip install tensorflow --user ``` 這裡的```--user```是賦予這個命令執行許可權的,一般我都會帶上。 ## 2 資料集構建 ```python # keras是TF的高階API,用起來更加的方便,一般也是用keras。 import tensorflow as tf from tensorflow import keras import numpy as np ``` 匯入需要用到的庫函式. 正如```torchvision.datasets```中一樣,```keras.datasets```中也封裝了一些常用的資料集。 ```python fashion_mnist = keras.datasets.fashion_mnist (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data() print('train_images shape:',train_images.shape) print('train_labels shape:',train_labels.shape) print('test_images shape:',test_images.shape) print('test_labels shape:',test_labels.shape) ``` 輸出結果是: ![](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bc17494c213242c68623421ab5aae276~tplv-k3u1fbpfcp-zoom-1.image) 訓練資料集中有60000個樣本,每一個樣本和MNIST手寫數字大小是一樣的,是$28\times 28$大小的,然後每一個樣本有一個標籤,這個標籤和MNIST也是一樣的,是從0到9,是一個十分類任務。 來看一下這些類別有哪些: |標籤|類別|標籤|類別| |--|---|--|---| |0|T-shirt|5|Sandal| |1|Trouser|6|Shirt| |2|Pullover|7|Sneaker| |3|Dress|8|Bag| |4|Coat|9|Ankle boot| 這裡學學單詞吧: - T-shirt就是T型的襯衫,就是短袖,我感覺前面沒有釦子的那種也叫T-shirt; - Shirt就是長袖的那種襯衫; - Trouser是褲子; - pullover是毛衣,套頭毛衣,就是常說的衛衣吧感覺; - dress連衣裙; - coat是外套; - sandal是涼鞋; - sneaker是運動鞋; - ankle boot是短靴,是到腳踝的那種靴子; - 這裡補充一個吧,sweater,是毛線衣,運動衫,這個和pullover有些類似,個人感覺主要的區分在於運動系列的可以叫做sweater,其他的毛衣衛衣是pullover。 **運動短袖T-shirt+運動衛衣sweater是我秋天去健身房的穿搭。** ## 2 預處理 這裡不做影象增強之類的了,上面的資料中,影象畫素值是從0到255的,我們要把這些標準化成0到1的範圍。 ```python train_images = train_images / 255.0 test_images = test_images / 255.0 ``` ## 3 構建模型 ```python # 模型搭建 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) ``` 這就是一個用keras構建簡單模型的例子: - ```keras.layers.Flatten```是把$28\times 28$的二維度拉平成一個維度,因為這裡是直接用全連線層而不是卷積層進行處理的; - 後面跟上兩個全連線層```keras.layers.Dense()```就行了。我們可以發現,這個全連線層的引數和PyTorch是有一些區別的: 1. PyTorch的全連線層需要一個輸入神經元數量和輸出數量```torch.nn.Linear(5,10)```,而keras中的Dense是不需要輸入引數的```keras.layers.Dense(10)```; 2. keras中的啟用層直接封裝在了Dense函式裡面,所以不需要像PyTorch一樣單獨寫一個```nn.ReLU()```了。 ## 4 優化器 ```python model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) ``` 定義優化器和損失函式,在keras中叫做**對模型進行編譯compile**(在C語言中,在執行程式碼之前都需要對程式碼進行編譯嘛)。**損失函式和優化器還有metric衡量指標的設定都在模型的編譯函式中設定完成。** 上面使用Adam作為優化器,然後損失函式用了交叉熵,然後衡量模型效能的使用了準確率Accuracy。 ## 5 訓練與預測 ```python model.fit(train_images, train_labels, epochs=10) ``` 這就是訓練過程,相比PyTorch而言,更加的簡單簡潔,但是不像PyTorch那樣靈活。 ```python test_loss, test_acc = model.evaluate(test_images, test_labels) print('\nTest accuracy:', test_acc) ``` 這個```.evaluate```方法是對模型的驗證集進行驗證的,因為本次任務中並沒有對訓練資料再劃分出驗證集,所以這裡直接使用測試資料了。 大家應該能理解訓練集、驗證集和測試集的用途和區別吧,我在第二課講過這個內容,在此不多加贅述。 ```python predictions = model.predict(test_images) ``` 這個```.predict```方法才是用在測試集上,進行未知標籤樣本的類別推理的。 本次內容到此為止,大家應該對keras和tensorflow有一個直觀淺顯的認識了。當然tensorflow也有一套類似於PyTorch中的dataset,dataloader的那樣自定義的資料集載入器的方法,在後續內容中會深入淺出的學