天天看點

mnist資料集,keras實作簡單密集連結(全連接配接)

我用到的是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()
           

繼續閱讀