删除 '手写数字识别1.py'
This commit is contained in:
parent
699739b150
commit
0319c6c959
93
手写数字识别1.py
93
手写数字识别1.py
|
|
@ -1,93 +0,0 @@
|
|||
#调用 TensorFlow
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
|
||||
import tensorflow as tf
|
||||
|
||||
from tensorflow.keras.layers import Dense, Flatten, Conv2D
|
||||
from tensorflow.keras import Model
|
||||
|
||||
#载入并准备好 MNIST 数据集:
|
||||
mnist = tf.keras.datasets.mnist
|
||||
|
||||
(x_train, y_train), (x_test, y_test) = mnist.load_data()
|
||||
x_train, x_test = x_train / 255.0, x_test / 255.0
|
||||
|
||||
# Add a channels dimension
|
||||
x_train = x_train[..., tf.newaxis]
|
||||
x_test = x_test[..., tf.newaxis]
|
||||
|
||||
|
||||
#使用 tf.data 来将数据集切分为 batch 以及混淆数据集:
|
||||
train_ds = tf.data.Dataset.from_tensor_slices(
|
||||
(x_train, y_train)).shuffle(10000).batch(32)
|
||||
test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)
|
||||
|
||||
#使用 Keras 模型子类化(model subclassing) API 构建 tf.keras 模型:
|
||||
class MyModel(Model):
|
||||
def __init__(self):
|
||||
super(MyModel, self).__init__()
|
||||
self.conv1 = Conv2D(32, 3, activation='relu')
|
||||
self.flatten = Flatten()
|
||||
self.d1 = Dense(128, activation='relu')
|
||||
self.d2 = Dense(10, activation='softmax')
|
||||
|
||||
def call(self, x):
|
||||
x = self.conv1(x)
|
||||
x = self.flatten(x)
|
||||
x = self.d1(x)
|
||||
return self.d2(x)
|
||||
|
||||
|
||||
model = MyModel()
|
||||
|
||||
#为训练选择优化器与损失函数:
|
||||
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
|
||||
|
||||
optimizer = tf.keras.optimizers.Adam()
|
||||
|
||||
#选择衡量指标来度量模型的损失值(loss)和准确率(accuracy)。这些指标在 epoch 上累积值,然后打印出整体结果
|
||||
train_loss = tf.keras.metrics.Mean(name='train_loss')
|
||||
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(
|
||||
name='train_accuracy')
|
||||
|
||||
test_loss = tf.keras.metrics.Mean(name='test_loss')
|
||||
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(
|
||||
name='test_accuracy')
|
||||
|
||||
#使用 tf.GradientTape 来训练模型
|
||||
@tf.function
|
||||
def train_step(images, labels):
|
||||
with tf.GradientTape() as tape:
|
||||
predictions = model(images)
|
||||
loss = loss_object(labels, predictions)
|
||||
gradients = tape.gradient(loss, model.trainable_variables)
|
||||
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
|
||||
|
||||
train_loss(loss)
|
||||
train_accuracy(labels, predictions)
|
||||
|
||||
#测试模型:
|
||||
@tf.function
|
||||
def test_step(images, labels):
|
||||
predictions = model(images)
|
||||
t_loss = loss_object(labels, predictions)
|
||||
|
||||
test_loss(t_loss)
|
||||
test_accuracy(labels, predictions)
|
||||
|
||||
|
||||
EPOCHS = 5
|
||||
|
||||
for epoch in range(EPOCHS):
|
||||
for images, labels in train_ds:
|
||||
train_step(images, labels)
|
||||
|
||||
for test_images, test_labels in test_ds:
|
||||
test_step(test_images, test_labels)
|
||||
|
||||
template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
|
||||
print(template.format(epoch + 1,
|
||||
train_loss.result(),
|
||||
train_accuracy.result() * 100,
|
||||
test_loss.result(),
|
||||
test_accuracy.result() * 100))
|
||||
Loading…
Reference in New Issue