首先,选用一个较为简单的手写数字图像集作为本次演示的数据集。利用普通神经网络实现
在TensorFlow的图像识别任务中:
# 在该数据集中已经划分了训练集与验证集,并且图像与其标签也已经切分
(x, y), (x_val, y_val) = datasets.mnist.load_data()
x = tf.convert_to_tensor(x, dtype=tf.float32)/255
y = tf.convert_to_tensor(y, dtype=tf.int32)
# 热编码
y = tf.one_hot(y, depth=10)
model = keras.Sequential([
layers.Dense(512, activation='relu'),
layers.Dense(256, activation='relu'),
layers.Dense(128, activation='relu'),
layers.Dense(10)])
optimizer = optimizers.SGD(learning_rate=0.001)
编写训练函数,初始化一些参数
def train_epoch(epoch):
# 设置批次处理量
for step, (x, y) in enumerate(train_dataset):
with tf.GradientTape() as tape:
x = tf.reshape(x, (-1, 28*28))
out = model(x)
# 计算损失值loss
loss = tf.reduce_sum(tf.square(out - y)) / x.shape[0]
# 优化与更新网络内部参数
grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
if step % 100 == 0:
print(epoch, step, 'loss:', loss.numpy())