Tensorflow 相关知识点总结(防止自己长时间不看而忘记)

基本模型复现框架

import tensorflow as tf
import numpy as np
class MNISTLoader():
    def __init__(self):
        mnist = tf.keras.datasets.mnist
        (self.train_data, self.train_label), (self.test_data, self.test_label) = mnist.load_data()
        self.train_data = np.expand_dims(self.train_data.astype(np.float32) / 255.0axis=-1)
        self.test_data = np.expand_dims(self.test_data.astype(np.float32) / 255.0axis=-1)
        self.train_label = self.train_label.astype(np.int32)
        self.test_label = self.test_label.astype(np.int32)

        self.num_train_data, self.num_test_data = self.train_data.shape[0]self.test_data.shape[0]
    
    def get_batch(self, batch_size):
        index = np.random.randint(0, np.shape(self.train_data)[0], batch_size)
        return self.train_data[index,:]self.train_label[index]

class MLP(tf.keras.Model):
    def __init__(self):
        super().__init__()
        self.flatten = tf.keras.layers.Flatten()
        self.dense1 = tf.keras.layers.Dense(units=100, activation=tf.nn.relu)
        self.dense2 = tf.keras.layers.Dense(units=10)

    def call(self, inputs):
        x = self.flatten(inputs)
        x = self.dense1(x)
        x = self.dense2(x)
        output = tf.nn.softmax(x)
        return output

num_epochs = 5
batch_size = 50
learning_rate = 0.001

model = MLP()
data_loader = MNISTLoader()
optimizer = tf.keras.optimizers.SGD(learning_rate = learning_rate)
num_batches = int(data_loader.num_train_data // batch_size * num_epochs)
# 设置Checkpoint
checkpoint = tf.train.Checkpoint(myMode=model)
manager = tf.train.CheckpointManager(checkpoint, directory='./save', max_to_keep=3)
# 设置TensorBoard
summary_writer = tf.summary.create_file_writer('./tensorboard')
for batch_index in range(num_batches):
    X, y = data_loader.get_batch(batch_size)
    with tf.GradientTape() as tape:
        y_pred = model(X)
        loss = tf.keras.losses.sparse_categorical_crossentropy(y_true=y, y_pred=y_pred)
        loss = tf.reduce_mean(loss)
        # 添加TensorBoard
        with summary_writer.as_default():
            tf.summary.scalar("loss", loss, step=batch_index)
        if batch_index % 100 == 0:
            path = manager.save(checkpoint_number=batch_index)
            print("model saved to %s" % path)
        print("batch %d: loss %f" % (batch_index, loss.numpy()))
    grads = tape.gradient(loss, model.variables)
    optimizer.apply_gradients(grads_and_vars=zip(grads, model.variables))


newModel = MLP()
checkpoint = tf.train.Checkpoint(myMode=newModel)
checkpoint.restore(tf.train.latest_checkpoint('./save'))

琐碎的知识点

  1. tf.keras.losses.sparse_categorical_crossentropy() # 标签是[4,6,7,8,4,2]
  2. tf.keras.losses.categorical_crossentropy() #标签是[[1,0,0,0],[0,0,0,1]]一类的One-Hot编码
  3. 无论是tf.keras.losses.sparse_categorical_crossentropy()还是tf.keras.losses.categorical_crossentropy(), 在前一层都需要加上tf.nn.softmax(), sigmoid函数同理
  4. 如果需要对Checkpoint限制最新的几个保存点个数,需要使用CheckpointManager来进行管理
  5. TensorBoard在默认状态下默认每30秒更新一次数据
  6. 如果需要重新训练,要删除记录文件夹内的信息并重启Tensorboard
  7. TensorBoard目录目前不支持中文编码,要保持英文

这篇文章是否对您有帮助?

请您为我打分吧!

平均分数 / 5. 投票数量:

目前没有投票!请您来当第一个吃螃蟹的人吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注