2-6实战回调函数

训练过程中将回调函数作用于模型:回调函数(callback)是在调用fit
时传入模型的一个对象(即实现特定方法的类实例),它在训练过程中的不同时间点都会被模型调用。它可以访问关于模型状态与性能的所有可用数据,还可以采取行动:中断训练、保存模型、加载一组不同的权重或改变模型的状态。
回调函数的一些用法示例如下所示:

1、模型检查点:在训练过程中的不同时间点保存模型的当前权重。
2、提前终止:如果验证损失不再改善,则中断训练(当然,同时保存在训练过程中得到的最佳模型)。
3、在训练过程中动态调节某些参数值:比如优化器的学习率。
4、在训练过程中记录训练指标和验证指标,或将模型学到的表示可视化(这些表示也在不断更新):你熟悉的Keras 进度条就是一个回调函数!
首先引入相关包

#callback
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import sklearn
import pandas as pd
import os
import sys
import time
import tensorflow as tf
from tensorflow import keras
print(tf.__version__)
print(sys.version_info)#系统的库
for module in mpl,np,pd,sklearn,tf,keras:
    print(module.__name__,module.__version__)

在这里插入图片描述
导入数据

#导入数据
fashion_mnist = keras.datasets.fashion_mnist
#拆分,利用load_data函数
(x_train_all,y_train_all),(x_test,y_test) = fashion_mnist.load_data()
#再一次拆分为训练集和验证集
x_valid,x_train = x_train_all[:5000],x_train_all[5000:]
y_valid,y_train = y_train_all[:5000],y_train_all[5000:]
print(x_valid.shape,y_valid.shape)
print(x_train.shape,y_train.shape)
print(x_test.shape,y_test.shape)

归一化数据

#对数据进行归一化
#x = (x-u) / std
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
#x_train"[None , 28 ,28] ->[None,784]
x_train_scaled = scaler.fit_transform(
    x_train.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)
x_valid_scaled = scaler.transform(
    x_valid.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)
x_test_scaled = scaler.transform(
    x_test.astype(np.float32).reshape(-1,1)).reshape(-1,28,28)

建立模型

#tf.keras.model.Sequential
#我的理解是:model是建立的一个Sequential模型
model = keras.models.Sequential()
#添加一些图层,这一句是指添加一个展平层,将输入一个28*28的一维向量
model.add(keras.layers.Flatten(input_shape=[28,28]))
#再加一层全连接层
#300个单元
model.add(keras.layers.Dense(400,activation="relu"))
model.add(keras.layers.Dense(200,activation="relu"))
model.add(keras.layers.Dense(10,activation="softmax"))
#另外一种写法
# model1 = keras.models.Sequential([
#     keras.layers.Flatten(input_shape=[28,28]),
#     keras.layers.Dense(300,activation='relu'),
#     keras.layers.Dense(100,activation='relu'),
#     keras.layers.Dense(10,activation='softmax')
# ])
#relu: y = max(0,x)
#softmax:将向量变成概率分布,x = [x1,x2,x3]
#            y = [e^x1/sum,e^x2/sum,e^x3/sum],
#            sum=e^x1/sum+e^x2/sum+e^x3/sum
#为什么用sparse:y只是一个index值,y经过one-hot变成向量
#if y是一个向量则loss='categorical_crossentropy'
model.compile(loss='sparse_categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

三种回调函数

  1. Tensorboard(回调需要文件夹)
  2. earlystopping
  3. ModelCheckpoint(文件名)
#三种callback
#Tensorboard(文件夹),earlystopping,ModelCheckpoint(文件名)
logdir = './callbacks'
if not os.path.exists(logdir):
    os.mkdir(logdir)#如果不存在
output_model_file = os.path.join(logdir,
                                 'fashion_mnist_model.h5')
callbacks = [
    keras.callbacks.TensorBoard(logdir),
    keras.callbacks.ModelCheckpoint(output_model_file,
                                    save_best_only = True),
    #earlystopping参数
    #mintor
    #min_dalta
    #patience
    keras.callbacks.EarlyStopping(patience=5,min_delta=1e-3)
]

fit,回调函数加上,等训练结束会生成一个callbacks文件夹…

history = model.fit(x_train_scaled,y_train,epochs=10,
                    validation_data=(x_valid_scaled,y_valid),
                    callbacks = callbacks)

在这里插入图片描述

def plot_learning_curves(history):
    pd.DataFrame(history.history).plot(figsize=(8,5))
    plt.grid(True)
    plt.gca().set_ylim(0,1)
    plt.show()
plot_learning_curves(history)

在这里插入图片描述
TensorBoard
终端输入命令(第一次用这条命令结果打开网页出现错误,后来用下面的命令成功打开)

tensorboard --logdir=C:\Users\徐达\Desktop\code\google_tf2.0\callbacks

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值