我用到的是tensorflow2.3裡的keras,cuda:10.1
代碼:
#%%
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt
#%%
mnist = keras.datasets.mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
#%%
class_names = []
for i in range(0, 10):
class_names.append('%d' % i)
#%%
# class_names
#%%
# train_images.shape
#%%
# len(train_labels)
#%%
# train_labels
#%%
# test_images.shape
#%%
# len(test_labels)
#%%
plt.figure()
plt.imshow(train_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
#%%
train_images = train_images / 255
test_images = test_images / 255
#%%
plt.figure(figsize=(5, 5))
for i in range(25):
plt.subplot(5, 5, i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[i], cmap=plt.cm.binary)
plt.xlabel(class_names[train_labels[i]])
plt.show()
#%%
model = keras.Sequential([keras.layers.Flatten(input_shape=(train_images.shape[1:])),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10)])
"""
該網絡的第一層 tf.keras.layers.Flatten 将圖像格式從二維數組(28 x 28 像素)轉換成一維數組(28 x 28 = 784 像素)。将該層視為圖像中未堆疊
的像素行并将其排列起來。該層沒有要學習的參數,它隻會重新格式化資料。
展平像素後,網絡會包括兩個 tf.keras.layers.Dense 層的序列。它們是密集連接配接或全連接配接神經層。第一個 Dense 層有 128 個節點(或神經元)。第二個
(也是最後一個)層會傳回一個長度為 10 的 logits 數組。每個節點都包含一個得分,用來表示目前圖像屬于 10 個類中的哪一類。
"""
#%%
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
#%%
model.fit(train_images, train_labels, epochs=20)
#%%
test_loss, test_accuracy = model.evaluate(test_images, test_labels, verbose=2)
print('\nTest accuracy:', test_accuracy)
#%%
probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])
#%%
# 在新資料集上預測
predictions = probability_model.predict(test_images)
#%%
# 輸出第一個數字的結果
p = np.array(predictions[0], np.uint8)
#%%
print(np.argmax(predictions[0]))
#%%
plt.figure()
plt.imshow(test_images[0])
plt.colorbar()
plt.grid(False)
plt.show()
#%%
# 使用訓練好的Model對單個圖像進行預測
img = test_images[1]
print(img.shape)
#%%
img = (np.expand_dims(img, 0))
print(img.shape)
#%%
predictions_single = probability_model.predict(img)
print(predictions_single)
#%%
np.argmax(predictions_single[0])
#%%
plt.figure()
plt.imshow(test_images[1])
plt.colorbar()
plt.grid(False)
plt.show()