首先我们插入昨天的作业代码,模型我们可以随机选取一种,这里我选择子类模型。
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)