tensorflow2.3 mnist
與時俱進,tensoflow 已經到2.3 了,是時候學習keras了。
習慣於圖結構,官網的demo看著不爽,拿來改寫一下。
import tensorflow as tf
import numpy as np
import cv2
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_inputs = tf.keras.layers.Input(shape=(28, 28))
net = tf.keras.layers.Flatten(input_shape=(28, 28))(x_inputs) #壓平 (None,784)
net = tf.keras.layers.Dense(128, activation='relu')(net)#全連線層 +relu
net = tf.keras.layers.Dropout(0.2)(net) #遺忘層
net = tf.keras.layers.Dense(10, activation="softmax")(net) #全連線層 +迴歸
model = tf.keras.models.Model(inputs=x_inputs, outputs=net)
train_loss = tf.keras.metrics.Mean(name='train_loss')
#計算準確度都封裝好了
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')
optimizer = tf.keras.optimizers.Adam()# 優化函式
while True:#這樣訓練效果不是很好,應該把資料打亂,分批次訓練。有心的同學自己改寫一下。
train_loss.reset_states()
train_accuracy.reset_states()
with tf.GradientTape() as tape:
predictions = model(x_train)#返回即預測,不錯
# loss都換成在這裡定義了
loss = tf.keras.losses.sparse_categorical_crossentropy(y_train, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
train_loss(loss)
train_accuracy(y_train, predictions)
print(train_loss.result(), train_accuracy.result())
if float(train_accuracy.result()) > 0.98:
break
model.save("./mnist.h5")
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]# 據說量化模型很快...
tflite_model = converter.convert()
open("mnist.tflite", "wb").write(tflite_model)
拿個圖測試一下試試
interpreter = tf.lite.Interpreter(
model_path="./mnist.tflite")
interpreter.allocate_tensors()
# 模型輸入和輸出細節
input_details = interpreter.get_input_details()
print(input_details)
output_details = interpreter.get_output_details()
print(output_details)
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
x_test = x_test.astype(np.float32)#原來的型別是 float64
interpreter.set_tensor(input_details[0]['index'], [x_test[3]])
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
out = output_data[0].tolist()
print(out.index(max(out)))
cv2.imshow("1", x_test[3])
cv2.waitKey(0)
效果應該不錯。
相關文章
- Pytorch MNIST Multi-layerPyTorch
- MNIST資料集介紹
- 使用tensorflow操作MNIST資料
- TensorFlow 入門(MNIST資料集)
- ML.NET呼叫Tensorflow模型示例——MNIST模型
- 【Python】keras使用Lenet5識別mnistPythonKeras
- 【Python】keras神經網路識別mnistPythonKeras神經網路
- MNIST3_tf2.keras訓練預測TF2Keras
- 執行caffe自帶的mnist例項教程
- 深度學習(一)之MNIST資料集分類深度學習
- 【小白學PyTorch】8 實戰之MNIST小試牛刀PyTorch
- Tensorflow2.0-mnist手寫數字識別示例
- Ubuntu18.04執行mnist_cnn.py記錄UbuntuCNN
- 【Python】keras卷積神經網路識別mnistPythonKeras卷積神經網路
- Pytorch搭建MyNet實現MNIST手寫數字識別PyTorch
- 學習Pytorch+Python之MNIST手寫字型識別PyTorchPython
- C++基於檔案流和armadillo讀取mnistC++
- keras 手動搭建alexnet並訓練mnist資料集Keras
- 如何在Tensorflow.js中處理MNIST影象資料JS
- 用tensorflow2實現mnist手寫數字識別
- MNIST資料集詳解及視覺化處理(pytorch)視覺化PyTorch
- 在PaddlePaddle上實現MNIST手寫體數字識別
- 如何入門Pytorch之四:搭建神經網路訓練MNISTPyTorch神經網路
- 前饋神經網路進行MNIST資料集分類神經網路
- Python深度學習入門之mnist-inception(Tensorflow2.0實現)Python深度學習
- [譯] 使用 PyTorch 在 MNIST 資料集上進行邏輯迴歸PyTorch邏輯迴歸
- 【原創】python實現BP神經網路識別Mnist資料集Python神經網路
- Pytorch筆記之 多層感知機實現MNIST資料集分類PyTorch筆記
- 成功解決PermissionError: [Errno 13] Permission denied: './data\\mnist\\train-images-idx3-ubyte'ErrorAI
- 深度學習例項之基於mnist的手寫數字識別深度學習
- matlab練習程式(神經網路識別mnist手寫資料集)Matlab神經網路
- TensorFlow系列專題(六):實戰專案Mnist手寫資料集識別
- AI朋克致敬MNIST:只用Python和開發板,製作永不重樣的時鐘AIPython
- 尋找手寫資料集MNIST程式的最佳引數(learning_rate、nodes、epoch)
- Deep Learning Tutorial (翻譯) 之使用邏輯迴歸分類手寫數字MNIST邏輯迴歸
- 使用Pytorch和卷積神經網路進行簡單的數字識別(MNIST)PyTorch卷積神經網路
- mnist手寫數字識別——深度學習入門專案(tensorflow+keras+Sequential模型)深度學習Keras模型
- 目標檢測(2):LeNet-5 的 PyTorch 復現(MNIST 手寫資料集篇)PyTorch