[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


<<:  RISC-V: R-type 位移指令

>>:  [day27] PostBack资料data处理 显示菜单

CSS display:grid

Gird是一种二维的布局方式,相较flex来说grid还多控制了列~ example : <d...

Day11. 人与人之间偶有摩擦,物体与物体之间叫做碰撞 - Collision(下)

昨天聊到碰撞是什麽,又如何在 Matter.js 中发生,相关函式扮演的角色等等。不知道大家还记不记...

抓取资料库数据 - SQL基础语法(下)

我们学会了单张表的查询与筛选,当资料需要跨表拉取时该怎麽办呢?这时候我们就需要用到JOIN来把表与表...

Day 24:605. Can Place Flowers

今日题目 题目连结:605. Can Place Flowers 题目主题:Array, Greed...

Day16 Vue directives(v-model资料双向绑定)

在Vue里有个很大的特色可能就是资料的双向绑定(Two-wayBinding),而资料绑定的话我们最...