1 import tensorflow as tf
2 import os
3 import numpy as np
4 from matplotlib import pyplot as plt
5 from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, MaxPool2D, Dropout, Flatten, Dense
6 from tensorflow.keras import Model
7
8
9 np.set_printoptions(threshold=np.inf)
10
11 cifar10 = tf.keras.datasets.cifar10
12 (x_train, y_train), (x_test, y_test) = cifar10.load_data()
13 x_train, x_test = x_train/25.0, x_test/255.0
14
15
16 class LeNet5(Model):
17 def __init__(self):
18 super(LeNet5, self).__init__()
19 self.c1 = Conv2D(filters=6, kernel_size=(5, 5), activation='sigmoid')
20 self.p1 = MaxPool2D(pool_size=(2, 2), strides=2)
21 self.c2 = Conv2D(filters=16, kernel_size=(5, 5), activation='sigmoid')
22 self.p2 = MaxPool2D(pool_size=(2, 2), strides=2)
23
24 self.flatten = Flatten()
25 self.f1 = Dense(120, activation='sigmoid')
26 self.f2=Dense(84, activation='sigmoid')
27 self.f3=Dense(10, activation='softmax')
28
29 def call(self, x):
30 x = self.c1(x)
31 x = self.p1(x)
32 x = self.c2(x)
33 x = self.p2(x)
34
35 x = self.flatten(x)
36 x = self.f1(x)
37 x = self.f2(x)
38 y = self.f3(x)
39 return y
40
41
42 model = LeNet5()
43
44 model.compile(optimizer='adam',
45 loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
46 metrics = ['sparse_categorical_accuracy'])
47
48 checkpoint_save_path = "./checkpoint/Baseline.ckpt"
49 if os.path.exists(checkpoint_save_path + ".index"):
50 print("--------------------load the model-----------------")
51 model.load_weights(checkpoint_save_path)
52
53 cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path, save_weights_only=True, save_best_only=True)
54
55 history = model.fit(x_train, y_train, batch_size=32, epochs=20, validation_data=(x_test, y_test), validation_freq=1, callbacks=[cp_callback])
56
57 model.summary()
58
59
60
61 with open('./weights.txt', 'w') as file:
62 for v in model.trainable_variables:
63 file.write(str(v.name) + '\n')
64 file.write(str(v.shape) + '\n')
65 file.write(str(v.numpy()) + '\n')
66
67
68
69 def plot_acc_loss_curve(history):
70 # 顯示訓練集和驗證集的acc和loss曲線
71 from matplotlib import pyplot as plt
72 acc = history.history['sparse_categorical_accuracy']
73 val_acc = history.history['val_sparse_categorical_accuracy']
74 loss = history.history['loss']
75 val_loss = history.history['val_loss']
76
77 plt.figure(figsize=(15, 5))
78 plt.subplot(1, 2, 1)
79 plt.plot(acc, label='Training Accuracy')
80 plt.plot(val_acc, label='Validation Accuracy')
81 plt.title('Training and Validation Accuracy')
82 plt.legend()
83 #plt.grid()
84
85 plt.subplot(1, 2, 2)
86 plt.plot(loss, label='Training Loss')
87 plt.plot(val_loss, label='Validation Loss')
88 plt.title('Training and Validation Loss')
89 plt.legend()
90 #plt.grid()
91 plt.show()
92
93 plot_acc_loss_curve(history)
#如下代碼來自 dive into DL TF2.0
1 import tensorflow as tf
2 print(tf.__version__)
3
4
5 net = tf.keras.models.Sequential([
6 tf.keras.layers.Conv2D(filters=6, kernel_size=5, activation='sigmoid', input_shape=(28, 28, 1)),
7 tf.keras.layers.MaxPool2D(pool_size=2, strides=2),
8 tf.keras.layers.Conv2D(filters=16, kernel_size=5, activation='sigmoid'),
9 tf.keras.layers.MaxPool2D(pool_size=2, strides=2),
10 tf.keras.layers.Flatten(),
11 tf.keras.layers.Dense(120, activation='sigmoid'),
12 tf.keras.layers.Dense(84, activation='sigmoid'),
13 tf.keras.layers.Dense(10, activation='softmax')
14 ])
15
16
17 X = tf.random.uniform((1, 28, 28, 1))
18 for layer in net.layers:
19 X = layer(X)
20 print(layer.name, 'output shape\t', X.shape)
21
22
23 net.summary()
24
25 fashion_mnist = tf.keras.datasets.fashion_mnist
26 (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
27
28 train_images = tf.reshape(train_images, (train_images.shape[0], train_images.shape[1], train_images.shape[2], 1))
29 print(train_images.shape)
30
31 test_images = tf.reshape(test_images, (test_images.shape[0], test_images.shape[1], test_images.shape[2], 1))
32 print(test_images.shape)
33
34
35 optimizer = tf.keras.optimizers.SGD(learning_rate=0.9, momentum=0.0, nesterov=False)
36
37 net.compile(optimizer = optimizer,
38 loss = 'sparse_categorical_crossentropy',
39 metrics = ['accuracy'])
40
41
42 net.fit(train_images, train_labels, epochs=5, validation_split=0.1)
43
44 net.evaluate(test_images, test_labels, verbose=2)