当前位置: 首页 > article >正文

model - construction

层和块

  • model - construction
  • 小结

model - construction

我们先回顾一下多层感知机

import tensorflow as tfnet = tf.keras.models.Sequential([tf.keras.layers.Dense(256, activation=tf.nn.relu),tf.keras.layers.Dense(10),
])X = tf.random.uniform((2, 20))
net(X)

自定义块

class MLP(tf.keras.Model):# 用模型参数声明层。这里,我们声明两个全连接的层def __init__(self):# 调用MLP的父类Model的构造函数来执行必要的初始化。# 这样,在类实例化时也可以指定其他函数参数,例如模型参数params(稍后将介绍)super().__init__()# Hiddenlayerself.hidden = tf.keras.layers.Dense(units=256, activation=tf.nn.relu)self.out = tf.keras.layers.Dense(units=10)  # Outputlayer# 定义模型的前向传播,即如何根据输入X返回所需的模型输出def call(self, X):return self.out(self.hidden((X)))

实例化多层感知机的层,然后在每次调用前向传播函数时调用这些层

net = MLP()
net(X)

顺序块

class MySequential(tf.keras.Model):def __init__(self, *args):super().__init__()self.modules = []for block in args:# 这里,block是tf.keras.layers.Layer子类的一个实例self.modules.append(block)def call(self, X):for module in self.modules:X = module(X)return X

当MySequential的前向传播函数被调用时, 每个添加的块都按照它们被添加的顺序执行。 现在可以使用我们的MySequential类重新实现多层感知机。

net = MySequential(tf.keras.layers.Dense(units=256, activation=tf.nn.relu),tf.keras.layers.Dense(10))
net(X)

在前向传播函数中执行代码

class FixedHiddenMLP(tf.keras.Model):def __init__(self):super().__init__()self.flatten = tf.keras.layers.Flatten()# 使用tf.constant函数创建的随机权重参数在训练期间不会更新(即为常量参数)self.rand_weight = tf.constant(tf.random.uniform((20, 20)))self.dense = tf.keras.layers.Dense(20, activation=tf.nn.relu)def call(self, inputs):X = self.flatten(inputs)# 使用创建的常量参数以及relu和matmul函数X = tf.nn.relu(tf.matmul(X, self.rand_weight) + 1)# 复用全连接层。这相当于两个全连接层共享参数。X = self.dense(X)# 控制流while tf.reduce_sum(tf.math.abs(X)) > 1:X /= 2return tf.reduce_sum(X)net = FixedHiddenMLP()
net(X)     

混合搭配各种组合块的方法

class NestMLP(tf.keras.Model):def __init__(self):super().__init__()self.net = tf.keras.Sequential()self.net.add(tf.keras.layers.Dense(64, activation=tf.nn.relu))self.net.add(tf.keras.layers.Dense(32, activation=tf.nn.relu))self.dense = tf.keras.layers.Dense(16, activation=tf.nn.relu)def call(self, inputs):return self.dense(self.net(inputs))chimera = tf.keras.Sequential()
chimera.add(NestMLP())
chimera.add(tf.keras.layers.Dense(20))
chimera.add(FixedHiddenMLP())
chimera(X)

小结

  • 一个块可以由许多层组成;一个块可以由许多块组成。
  • 块可以包含代码。
  • 块负责大量的内部处理,包括参数初始化和反向传播。
  • 层和块的顺序连接由Sequential块处理。
http://www.lryc.cn/news/2418534.html

相关文章:

  • php中 session start,php中session_start()的具体解释
  • Flappy Bird成名记:28天令人咋舌却真实的故事
  • 用Java实现文本编辑器
  • highdefinitionaudio驱动感叹号_High Definition Audio
  • HBuilder的下载与使用(详细步骤)
  • linux les命令,Linux用户和组命令
  • [转]CMS Content Management System(内容管理系统) 提供商
  • 【jsp+servelet】JSTL c:out使用 escapeXml 属性保持 HTML 格式编排
  • 12306可免费送人进站,接人出站!无需购票即可送至站台、车厢
  • bootstrap fileupload插件实现文件上传与前端回显图片
  • EI检索入口查询方法
  • magent java_bt种子简介与magnet磁力介绍
  • 毕业设计:基于java的出租车计价器系统设计与实现
  • This failure was cached in the local repository and resolution is not reattempted until the update
  • 前端中--js定时器的用法SetTimeout
  • Web窗体的基本控件
  • Linux格式化命令
  • weblogic漏洞:CNVD-C-2019-48814
  • 日语
  • 【STM32F042】使用NTC热敏电阻实现温度测量
  • 360手机官方刷机教程(N5系列通用)
  • linux 命令:top 详解
  • 比特率(码率) = 采样率 (Sampling rate ) * 位深 (Bit depth)* 声道数目/Opus/AAC/mp3
  • 人工智能常用的优化算法(梯度下降、牛顿法、拟牛顿法、共轭梯度法、)
  • 奇迹按键精灵挂机脚本_按键精灵做连击脚本(奇迹MU战士用)
  • 计算机专业术语e-mail是什么意思,E-mail是什么意思?
  • msvcrtd.dll下载安装方法是什么?快速修复msvcrtd.dll的手段
  • Windows RC版、RTM版、OEM版、RTL版、VOL版的区别
  • 未能加载文件或程序集“System.Data.SQLite, Version=1.0.84.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139”或它
  • Julia的安装与配置详解(包含在Ubuntu 18