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中的JSON模块
Apr 08 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
关于Python面向对象编程的知识点总结
Feb 14 Python
Python之Web框架Django项目搭建全过程
May 02 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
Apr 02 Python
Python实现的爬取小说爬虫功能示例
Mar 30 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
一篇文章了解Python中常见的序列化操作
Jun 20 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
Python更新所有已安装包的操作
Feb 13 Python
python scipy 稀疏矩阵的使用说明
May 26 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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
ThinkPHP处理Ajax返回的方法
2014/11/22 PHP
Yii中Model(模型)的创建及使用方法
2015/12/28 PHP
php数组和链表的区别总结
2019/09/20 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
过虑特殊字符输入的js代码
2010/08/05 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
Vue 同步异步存值取值实现案例
2020/08/05 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
Python中for循环控制语句用法实例
2015/06/02 Python
Python基于有道实现英汉字典功能
2015/07/25 Python
python代码过长的换行方法
2018/07/19 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Python netmiko模块的使用
2020/02/14 Python
python入门之井字棋小游戏
2020/03/05 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
什么是规则表达式
2012/05/03 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
银行存款证明样本
2014/01/17 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
服务承诺书格式
2014/05/21 职场文书
2014年仓库工作总结
2014/11/20 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
SQL写法--行行比较
2021/08/23 SQL Server