import tensorflow as tf
#导入数据
(train_image,train_labels),(test_images,test_labels)=tf.keras.datasets.mnist.load_data()
#数据预处理
train_image=tf.expand_dims(train_image,-1)
train_image=tf.cast(train_image/255,tf.float32)
train_labels=tf.cast(train_labels,tf.int64)
test_images=tf.expand_dims(test_images,-1)
test_images=tf.cast(test_images/255,tf.float32)
test_labels=tf.cast(test_labels,tf.int64)
#数据切片导入
dataset=tf.data.Dataset.from_tensor_slices((train_image,train_labels))
test_dataset=tf.data.Dataset.from_tensor_slices((test_images,test_labels))
dataset=dataset.repeat().shuffle(10000).batch(128)
test_dataset=test_dataset.batch(128)
#建立模型
model=tf.keras.Sequential([
tf.keras.layers.Conv2D(16,[3,3],activation='relu',input_shape=(28,28,1)),#input_shape=(None,None,1)
tf.keras.layers.Conv2D(32,[3,3],activation='relu'),
tf.keras.layers.GlobalAveragePooling2D(),
tf.keras.layers.Dense(10,activation='softmax')
])
#不使用自定义训练
model.compile(
optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy']
)
import os
import datetime
#设置日志(log)存放位置,文件夹名字为当前的时间
log1dir=os.path.join('D:\JupyterFile\Log',datetime.datetime.now().strftime('%Y%m%d-%H%M%S'))
#设置tensorboard回调函数,设置存储位置,设置histogram_freq,对于模型中各个层计算激活值和模型权重直方图的频率(训练轮数中)。 如果设置成 0 ,直方图不会被计算。对于直方图可视化的验证数据(或分离数据)一定要明确的指出。设置成一表示一个epoch绘制一个点tensorboard_callback=tf.keras.callbacks.TensorBoard(log_dir=log1dir,histogram_freq=1)
#创建文件编写器:(作用是当调用这个写入器的时候,将数据写入写入器的指定位置,这里设置一个写入位置learning_rate,用来记录学习率的变化)
file_writer=tf.summary.create_file_writer(log1dir+'/learning_rate')
file_writer.set_as_default()
def learning_rate(epoch):
rate=0.2
if epoch>10:
rate=0.1
if epoch>20:
rate=0.05
tf.summary.scalar('learning-rate',data=rate,step=epoch) #使用file_writer(写入器)记录该标量,写入file_writer指定的目录中
return rate
#创建学习率回调函数
learning_rate_callback=tf.keras.callbacks.LearningRateScheduler(learning_rate)
model.fit(
dataset,
epochs=25,
steps_per_epoch=60000//128,
validation_data=test_dataset,
validation_batch_size=10000//128,
callbacks=[tensorboard_callback,learning_rate_callback,], #回调函用在这里,当训练一个epoch完毕的时候,调用一次回调函数,记录tensorboard所需数据和自定义的学习率变化数据
verbose=2
)
%load_ext tensorboard #加载tensorboard
%matplotlib inline
%tensorboard --logdir=D:\JupyterFile\Log #tensorboard 中导入log的数据
Tensorflow2.0基础-笔记-利用回调函数使用Tensorboard
最新推荐文章于 2024-01-07 07:32:29 发布