tensorflow之自定义神经网络层实例


Posted in Python onFebruary 07, 2020

如下所示:

import tensorflow as tf
tfe = tf.contrib.eager

tf.enable_eager_execution()

大多数情况下,在为机器学习模型编写代码时,您希望在比单个操作和单个变量操作更高的抽象级别上操作。

1.关于图层的一些有用操作

许多机器学习模型可以表达为相对简单的图层的组合和堆叠,TensorFlow提供了一组许多常用图层,以及您从头开始或作为组合创建自己的应用程序特定图层的简单方法。TensorFlow在tf.keras包中包含完整的Keras API,而Keras层在构建自己的模型时非常有用。

#在tf.keras.layers包中,图层是对象。要构造一个图层,只需构造一个对象。大多数层将输出维度/通道的数量作为第一个参数。
layer=tf.keras.layers.Dense(100)
#输入维度的数量通常是不必要的,因为它可以在第一次使用图层时推断出来,但如果您想手动指定它,则可以提供它,这在某些复杂模型中很有用。
layer=tf.keras.layers.Dense(10,input_shape=(None,5))
#调用层
layer(tf.zeros([10,5]))
 

#图层有许多有用的方法。例如,您可以通过调用layer.variables来检查图层中的所有变量。在这种情况下,完全连接的层将具有权重和偏差的变量。
variable=layer.variables
# variable[0]
layer.kernel.numpy()
layer.bias

2.自定义图层

实现自己的层的最佳方法是扩展tf.keras.Layer类并实现:

__init__,您可以在其中执行所有与输入无关的初始化

build方法,您知道输入张量的形状,并可以进行其余的初始化

call方法,在这里进行正向传播计算

请注意,您不必等到调用build来创建变量,您也可以在__init__中创建它们。但是,在build中创建它们的优点是它可以根据图层将要操作的输入的形状启用后期变量创建。另一方面,在__init__中创建变量意味着需要明确指定创建变量所需的形状。

class MyDenseLayer(tf.keras.layers.Layer):
 def __init__(self, num_outputs):
  super(MyDenseLayer, self).__init__()
  self.num_outputs = num_outputs
  
 def build(self, input_shape):
  self.kernel = self.add_variable("kernel", 
                  shape=[input_shape[-1].value, 
                      self.num_outputs])
  
 def call(self, input):
  return tf.matmul(input, self.kernel)
 
layer = MyDenseLayer(10)
print(layer(tf.zeros([10, 5])))
print(layer.variables)

3.搭建网络结构

机器学习模型中许多有趣的图层是通过组合现有层来实现的。例如,resnet中的每个residual块是卷积,批量标准化等的组合。

创建包含其他图层的类似图层的东西时使用的主类是tf.keras.Model。实现一个是通过继承自tf.keras.Model完成的。

class ResnetIdentityBlock(tf.keras.Model):
 def __init__(self, kernel_size, filters):
  super(ResnetIdentityBlock, self).__init__(name='')
  filters1, filters2, filters3 = filters
 
  self.conv2a = tf.keras.layers.Conv2D(filters1, (1, 1))
  self.bn2a = tf.keras.layers.BatchNormalization()
 
  self.conv2b = tf.keras.layers.Conv2D(filters2, kernel_size, padding='same')
  self.bn2b = tf.keras.layers.BatchNormalization()
 
  self.conv2c = tf.keras.layers.Conv2D(filters3, (1, 1))
  self.bn2c = tf.keras.layers.BatchNormalization()
 
 def call(self, input_tensor, training=False):
  x = self.conv2a(input_tensor)
  x = self.bn2a(x, training=training)
  x = tf.nn.relu(x)
 
  x = self.conv2b(x)
  x = self.bn2b(x, training=training)
  x = tf.nn.relu(x)
 
  x = self.conv2c(x)
  x = self.bn2c(x, training=training)
 
  x += input_tensor
  return tf.nn.relu(x)
 
  
block = ResnetIdentityBlock(1, [1, 2, 3])
print(block(tf.zeros([1, 2, 3, 3])))
print([x.name for x in block.variables])

以上这篇tensorflow之自定义神经网络层实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中__call__方法示例分析
Oct 11 Python
Python的Django框架中从url中捕捉文本的方法
Jul 20 Python
Python爬取网易云音乐热门评论
Mar 31 Python
用tensorflow构建线性回归模型的示例代码
Mar 05 Python
python中pip的安装与使用教程
Aug 10 Python
Python通过paramiko远程下载Linux服务器上的文件实例
Dec 27 Python
详解Python3 对象组合zip()和回退方式*zip
May 15 Python
Python中import导入不同目录的模块方法详解
Feb 18 Python
python 通过文件夹导入包的操作
Jun 01 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
Python获取百度热搜的完整代码
Apr 07 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 #Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
Feb 07 #Python
python文件和文件夹复制函数
Feb 07 #Python
tf.concat中axis的含义与使用详解
Feb 07 #Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 #Python
Python for循环通过序列索引迭代过程解析
Feb 07 #Python
python中with用法讲解
Feb 07 #Python
You might like
PHP 的几个配置文件函数
2006/12/21 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP、Python和Javascript的装饰器模式对比
2015/02/03 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
JQuery为textarea添加maxlength属性的代码
2010/04/07 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
jQuery的extend方法【三种】
2016/12/14 Javascript
input输入密码变黑点密文的实现方法
2017/01/09 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
python链接oracle数据库以及数据库的增删改查实例
2018/01/30 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
python_array[0][0]与array[0,0]的区别详解
2020/02/18 Python
matplotlib绘制鼠标的十字光标的实现(自定义方式,官方实例)
2021/01/10 Python
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
英国马莎百货印度官网:Marks & Spencer印度
2020/10/08 全球购物
Linux中如何用命令创建目录
2015/01/12 面试题
师范应届生语文教师求职信
2013/10/29 职场文书
食品采购员岗位职责
2014/04/14 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
详解Java实践之适配器模式
2021/06/18 Java/Android
Redis基于Bitmap实现用户签到功能
2021/06/20 Redis
详解Python中*args和**kwargs的使用
2022/04/07 Python