推荐:
【tensorflow2.0最新建模教程】,如下:
tensorflow2.0教程 常用操作集合1—Layer自定义层的设计
常用操作集合系列3—Model自定义模型的训练和参数调优loss gradient optimizer
常用操作集合系列4—损失函数正则化解决模型过拟合
在完成系列1自定义层设计后,下面我们把多层自定义神经网络嵌套成为一个完整的计算网络模型,代码示例如下:
#自定义层设计Mydense
Class Mydense(layer):
def _init_(self,units):
super(Mydense,self)._init_()
self.units=uints
def build(slef,input_shape):
self.w=self.add_weight(shape=(input_shape[-1],units),initializer='random_normal',trainalbe=True)
self.b=self.ad_weight(shape=uinits,initializer='random_normal',trainable=True)
def call(self,input):
return tf.matmul(input,self.w) + self.b
#自定义模型设计
Class Model(keras.model):
def _init_(self):
super(Model,self)._init_()
self.layer1=Mydense(32)
self.layer2=Mydense(32)
self.layer3=Mydense(10)
def call(self,input):
x=self.layer1(input)
x=tf.nn.relu(x)
x=self.layer2(x)
x=tf.nn.relu(x)
x=self.layer3(x)
return x
当然我们还可以在模型中,根据自己的计算需要,加入丰富的层网络,譬如conv2D、LSTM、Dropout等不同的神经网络。下面我们在模型中加入解决模型过拟合常用到的Dropout层,代码示例如下:
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
在上面代码中,我们会注意到@tf.function,它是把计算程序编译成静态图再运行的工具。因为在TensorFlow 2.0中,默认情况下会打开eager execution,通过function操作,我们可以编排预期的执行顺序,tf.function非常智能,可以为代码添加最小的必要和充分的控制依赖关系,以便正确运行。不仅可以使得模型提高计算性能和速度(for graphs with many small ops
import timeit),而且可以保证在任何地方部署,灵活调用。
持续更新AI深度学习算法实战代码,如果您感兴趣,欢迎关注《深度学习算法攻城狮》,十分钟教你学会敲出AI聊天机器人@~@
转载:https://blog.csdn.net/weixin_37479258/article/details/100826635
查看评论