小言_互联网的博客

tensorflow2.0建模教程 常用操作集合系列2—Model自定义模型的设计(多层Layer嵌套成一个完整的计算网络模型)

1063人阅读  评论(0)

推荐:
【tensorflow2.0最新建模教程】,如下:
tensorflow2.0教程 常用操作集合1—Layer自定义层的设计

常用操作集合系列2—Model自定义模型的设计

常用操作集合系列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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场