【tensorflow2.0】5.作业:训练模型及使用回调函数

首先我们插入昨天的作业代码,模型我们可以随机选取一种,这里我选择子类模型。

import tensorflow as tf
from sklearn import datasets #导入数据集
import numpy as np

#下载数据集并对应数据和标签
iris = datasets.load_iris()
data = iris.data
labels = iris.target
#在150对应的维度上进行拼接
data = np.concatenate((data,labels.reshape(150,1)),axis=-1)
#将数据打乱:神经网络的拟合能力太强了,如果不乱序的话,同一个组合的batch反复出现,模型有可能会“记住”这些样本的次序,从而影响泛化能力。
np.random.shuffle(data)

#将数据拆分为数据和标签
Y = data[:,-1]
X = data[:,:4]

class MyModel(tf.keras.Model):
    def __init__(self):
        super(MyModel,self).__init__()
        self.D1 = tf.keras.layers.Dense(32,activation='relu')
        self.D2 = tf.keras.layers.Dense(32,activation='relu')
        self.D3 = tf.keras.layers.Dense(3,activation='softmax')
    def call(self,inputs):
        x = self.D1(inputs)
        x = self.D2(x)
        x = self.D3(x)
        return x
model = MyModel()



####模型训练:选择SGD优化器,交叉熵损失函数,准确率评测指标
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])

callbacks = [tf.keras.callbacks.ModelCheckpoint(
                    filepath='mymodel', #设置文件路径及文件名
                    save_best_only = True ,
                    verbose=1,
                    mode='val_acc',
                    save_weights_only = True)]
#keras
model.fit(X, Y, batch_size=32, epochs=100,callbacks=callbacks,validation_split=0.2,shuffle=True)

运行结果如下,并且权重文件以保存在当前代码所在目录下
在这里插入图片描述

接下来说一下如何使用保存好的权重

import tensorflow as tf
from sklearn import datasets #导入数据集
import numpy as np
#加载数据
iris = datasets.load_iris()
data = iris.data
labels = iris.target
#这里的网络结构必须和所保存的权重网络相同
class MyModel(tf.keras.Model):
    def __init__(self):
        super(MyModel,self).__init__()
        self.D1 = tf.keras.layers.Dense(32,activation='relu')
        self.D2 = tf.keras.layers.Dense(32,activation='relu')
        self.D3 = tf.keras.layers.Dense(3,activation='softmax')
    def call(self,inputs):
        x = self.D1(inputs)
        x = self.D2(x)
        x = self.D3(x)
        return x
model = MyModel()
#这里也要相同
model.compile(optimizer=tf.keras.optimizers.SGD(learning_rate=0.01),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=[tf.keras.metrics.SparseCategoricalAccuracy()])
#用model.load_weight()加载权重
model.load_weights('mymodel')

#然后选取需要验证的数据集,这里我们选取前十个数据
x = data[0:10]
y = labels[0:10]
#开始验证
model.evaluate(x,y,verbose=1)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值