iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
AI & Data

Python 機器學習實驗室 ʘ ͜ʖ ʘ系列 第 25

[Python] 來自己建立一個Neural Network吧

前幾天大概說明了NN的概念,今天就用python來實現一下~我主要是使用Colab來執行,因為在Colab上安裝Tensorflow& Keras很間單,還有Colab有提供免費GPU(我記得使用的時間是12個小時左右)!今天的dataset是一個keras內建資料庫-fashion_mnist,裡面有很多不同服飾的灰度圖(28x28),我們來訓練一個模型判斷照片內容物是什麼。
https://ithelp.ithome.com.tw/upload/images/20211009/20142004v3RgS1xGHz.png

Tensorflow& Keras的關係可以想成主程式與介面,keras是讓Tensorflow寫起來更容易的使用方式

import tensorflow as tf
from tensorflow import keras
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

fashion_mnist = keras.datasets.fashion_mnist
(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()
X_train = X_train / 255.0 #為了顯示圖像對資料進行預處理
X_test = X_test / 255.0 #為了顯示圖像對資料進行預處理
class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat", "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]
  • 灰度圖的範圍為0-255,0是黑色,255是白色

開始建模型,主要可以自己決定要幾層layer,每一層node要多少個,non-linear要使用哪一種,有點像在疊樂高一樣,但記得因為是多分類問題,所以最後要加一層softmax,然後架構就大致建好了,最後的組裝是要決定整個架構要用哪一種loss function以及要用哪種metrics來衡量,我們這邊loss function使用分類問題常見的crossentropy,metrics就是accuracy。

model = keras.models.Sequential()
model.add(keras.layers.Flatten(input_shape=[28, 28]))
model.add(keras.layers.Dense(300, activation="relu"))
model.add(keras.layers.Dense(100, activation="relu"))
model.add(keras.layers.Dense(100, activation="relu"))
model.add(keras.layers.Dense(50, activation="relu"))
model.add(keras.layers.Dense(10, activation="softmax"))
print(model.summary())

model.compile(loss="sparse_categorical_crossentropy", optimizer="Adam", metrics=["accuracy"])

訓練模型~

history = model.fit(X_train, y_train, epochs=20, validation_split=0.1)

來看一下模型結果

pd.DataFrame(history.history).plot(figsize=(8, 5))

https://ithelp.ithome.com.tw/upload/images/20211009/20142004gOtMoSEwjL.png

fit test

model.evaluate(X_test, y_test)

https://ithelp.ithome.com.tw/upload/images/20211009/20142004rtd9gJcYHH.png

隨機找個圖片預測一下:

import random
img = X_test[random.randint(0,9999),:,:]
plt.imshow(img)

https://ithelp.ithome.com.tw/upload/images/20211009/20142004NetS1VCxm1.png

X_new = np.expand_dims(img, axis=0)
model.predict(X_new).round(2)

y_pred = model.predict_classes(X_new)
class_names[int(y_pred)]

https://ithelp.ithome.com.tw/upload/images/20211009/20142004epWBaeYNgc.png

[reference]
https://www.tensorflow.org/datasets/catalog/fashion_mnist
https://blog.csdn.net/sdlyjzh/article/details/8245145
https://www.tensorflow.org/api_docs/python/tf/keras/Model


上一篇
RNN
下一篇
[Python] CNN
系列文
Python 機器學習實驗室 ʘ ͜ʖ ʘ30

尚未有邦友留言

立即登入留言