推荐:
【tensorflow2.0最新建模教程】,如下:
tensorflow2.0教程 常用操作集合1—Layer自定义层的设计
常用操作集合系列3—Model自定义模型的训练和参数调优loss gradient optimizer
常用操作集合系列4—损失函数正则化解决模型过拟合
在完成上篇tensorflow2.0 建模教程系列2 自定义模型的设计后,我们要灌入训练数据进行训练了,这就涉及到训练过程中最重要的损失函数、梯度下降和调参调优。
在tf2.0版本中,最重要的图计算方法 with tape.GradientTape() as tape,可以设计完成整个过程。
1损失函数我们可以用loss_fn表达:
loss_fn=tf.keras.losses.categorical_crossentropy(from_logits=True)
2选取优化器
optimizer=tf.keras.optimizers.SGD(learning_rate=1e-3)
3梯度计算:
#梯度和权重:
tape.gradient(loss,model.trainable_weights)
4参数调优:
optimizer.apply_gradients(zip(gradients,model.trainable_weights))
完整代码示例如下:
#数据预处理函数定义与调用
def process(x,y):
x=tf.cast(x,dtype=tf.float32)/255
x=tf.reshape(x,[-1,28*28])
y=tf.one_hot(y,depth=10)
return x,y
#模型自定义设计
Class Dropout(Layer):
def _init_(self,rate):
super(Dropout,self)._init_()
self.rate=rate
@tf.function#function装饰器可以用来在函数中增加'if'等条件或者'for'循环控制流
def call(self,input,training=None):
if training:
return tf.nn.dropout(input,self.rate)
return input
Class Model(keras.Model):
def _init_(self):
super(Model,self)._init_()
self.layer1=Mydense(32)
self.layer2=Mydense(32)
self.dropout2=Dropout(0.3)
self.layer3=Mydense(10)
self.dropout3=Dropout(0.3)
def call(self,input):
x=self.layer1(input)
x=tf.nn.relu(x)
x=self.layer2(x)
x=self.dropout1(x)
x=tf.nn.relu(x)
x=self.layer3(x)
x=self.dropout2(x)
x=tf.nn.relu(x)
return x
#prepare data数据准备
(x_train,y_train),(x_test,y_test)=tf.keras.datasets.mnist.loaddata()
dataset=tf.data.Dataset.from_tensor_slices((x_train,y_train))
dataset=dataset.shuffle(12000).batch(128).map(preprocess).repeat(30)
model=Model()
#损失函数和优化器设定
loss_fn=tf.keras.losses.CategoriCrossentropy(from_logits=True)
optimizer=tf.keras.optimizers.SGD(learning_rate=1e-3)
#开始训练与调优
for step,(x,y) in enumerate(dataset):
with tape.GradientTape() as tape:
logits=model(x)
loss=loss_fn(logits,y)
gradients=tape.gradient(loss,model.trainable_weights)
optimizer.apply_gradients(zip(gradients,model.trainable_weights))
if step%100=0:
print(step,float(loss))
持续更新深度学习算法项目实战代码,如果您感兴趣,欢迎关注《深度学习算法攻城狮》,十分钟教你学会敲出AI聊天机器人@~@
转载:https://blog.csdn.net/weixin_37479258/article/details/100868608
查看评论