from __future__ import absolute_import, division, print_function, unicode_literals
# 導入TensorFlow和tf.keras
import tensorflow as tf
from tensorflow import keras
# 導入輔助庫
import numpy as np
import matplotlib.pyplot as plt
print(tf.__version__)
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
能夠看出一共有10種labeljavascript
train_images.shape#打印訓練集規模:6w張圖片,每張都規模是28*28
len(train_labels)#每一個圖片一個label,一共有6w個label
能夠大概看看這些個label的具體內容css
train_labels
test_images.shape
import random
for i in range(10):
plt.figure()
n=random.randint(0,60000)
plt.imshow(train_images[n])
plt.colorbar()
plt.grid(False)
print("showing train_images:",i+1,";",n)
plt.show()
train_images = train_images / 255.0
test_images = test_images / 255.0
plt.figure(figsize=(10,10))
for i in range(25):
n=random.randint(0,60000)
plt.subplot(5,5,i+1)
plt.xticks([])
plt.yticks([])
plt.grid(False)
plt.imshow(train_images[n], cmap=plt.cm.binary)
txt=str(i+1)+","+str(n)+","+str(class_names[train_labels[n]])
plt.xlabel(txt)
'''
txt=str(i)+","+str(n)+","+str(class_names[train_labels[n]])
plt.text(txt)
'''
plt.show()
網絡中的第一層, tf.keras.layers.Flatten, 將圖像格式從一個二維數組(包含着28x28個像素)轉換成爲一個包含着28 * 28 = 784個像素的一維數組。能夠將這個網絡層視爲它將圖像中未堆疊的像素排列在一塊兒。這個網絡層沒有須要學習的參數;它僅僅對數據進行格式化。html
在像素被展平以後,網絡由一個包含有兩個tf.keras.layers.Dense網絡層的序列組成。他們被稱做稠密連接層或全鏈接層。 第一個Dense網絡層包含有128個節點(或被稱爲神經元)。第二個(也是最後一個)網絡層是一個包含10個節點的softmax層—它將返回包含10個機率分數的數組,總和爲1。每一個節點包含一個分數,表示當前圖像屬於10個類別之一的機率。html5
keras.layers.Conv2D(filters, kernel_size, strides=(1, 1), padding='valid', data_format=None, dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)java
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
#keras.layers.Conv2D(128, 4),
keras.layers.Dense(128, activation=tf.nn.relu),
keras.layers.Dense(10, activation=tf.nn.softmax)
])
'''
model = keras.Sequential()
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1],
border_mode='same',
input_shape=input_shape))
model.add(keras.layers.Conv2D(32, (kernel_size[0], kernel_size[1]),
padding='same',
input_shape=input_shape)) # 卷積層1
model.add(Activation('relu')) #激活層
model.add(keras.layers.Conv2D(32, (kernel_size[0], kernel_size[1]))) #卷積層2
model.add(Activation('relu')) #激活層
model.add(MaxPooling2D(pool_size=pool_size)) #池化層
model.add(Dropout(0.25)) #神經元隨機失活
model.add(Flatten()) #拉成一維數據
model.add(Dense(128)) #全鏈接層1
model.add(Activation('relu')) #激活層
model.add(Dropout(0.5)) #隨機失活
model.add(Dense(nb_classes)) #全鏈接層2
model.add(Activation('softmax')) #Softmax評分
'''
編譯模型 在模型準備好進行訓練以前,它還須要一些配置。這些是在模型的編譯(compile)步驟中添加的:node
損失函數 —這能夠衡量模型在培訓過程當中的準確程度。 咱們但願將此函數最小化以"驅使"模型朝正確的方向擬合。 優化器 —這就是模型根據它看到的數據及其損失函數進行更新的方式。 評價方式 —用於監控訓練和測試步驟。如下示例使用準確率(accuracy),即正確分類的圖像的百分數。python
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
訓練模型 訓練神經網絡模型須要如下步驟:jquery
將訓練數據提供給模型 - 在本案例中,他們是train_images和train_labels數組。 模型學習如何將圖像與其標籤關聯 咱們使用模型對測試集進行預測, 在本案例中爲test_images數組。咱們驗證預測結果是否匹配test_labels數組中保存的標籤。 經過調用model.fit方法來訓練模型 — 模型對訓練數據進行"擬合"。linux
model.fit(train_images, train_labels, epochs=5)
使用測試集進行模型評估
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('Test accuracy:', test_acc)
predictions = model.predict(test_images)
predictions[0]
np.argmax(predictions[0])
test_labels[0]
將結論可視化android
def plot_image(i, predictions_array, true_label, img):
predictions_array, true_label, img = predictions_array[i], true_label[i], img[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
plt.imshow(img, cmap=plt.cm.binary)
predicted_label = np.argmax(predictions_array)
if predicted_label == true_label:
color = 'blue'
else:
color = 'red'
plt.xlabel("{}{:2.0f}% ({})".format(class_names[predicted_label],
100*np.max(predictions_array),
class_names[true_label]),
color=color)
def plot_value_array(i, predictions_array, true_label):
predictions_array, true_label = predictions_array[i], true_label[i]
plt.grid(False)
plt.xticks([])
plt.yticks([])
thisplot = plt.bar(range(10), predictions_array, color="#777777")
plt.ylim([0, 1])
predicted_label = np.argmax(predictions_array)
thisplot[predicted_label].set_color('red')
thisplot[true_label].set_color('blue')
選取可視化測試樣例爲0號樣本
for i in range(100,120):
plt.figure(figsize=(6,3))
plt.subplot(1,2,1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(1,2,2)
plot_value_array(i, predictions, test_labels)
plt.show()
num_rows = 5
num_cols = 3
num_images = num_rows*num_cols
plt.figure(figsize=(2*2*num_cols, 2*num_rows))
for i in range(num_images):
plt.subplot(num_rows, 2*num_cols, 2*i+1)
plot_image(i, predictions, test_labels, test_images)
plt.subplot(num_rows, 2*num_cols, 2*i+2)
plot_value_array(i, predictions, test_labels)
plt.show()
tz@croplab,hzau
2019/9/19