Tensorflow 卷积的梯度反向传播过程


Posted in Python onFebruary 10, 2020

一. valid卷积的梯度

我们分两种不同的情况讨论valid卷积的梯度:第一种情况,在已知卷积核的情况下,对未知张量求导(即对张量中每一个变量求导);第二种情况,在已知张量的情况下,对未知卷积核求导(即对卷积核中每一个变量求导)

1.已知卷积核,对未知张量求导

我们用一个简单的例子理解valid卷积的梯度反向传播。假设有一个3x3的未知张量x,以及已知的2x2的卷积核K

Tensorflow提供函数tf.nn.conv2d_backprop_input实现了valid卷积中对未知变量的求导,以上示例对应的代码如下:

import tensorflow as tf

# 卷积核
kernel=tf.constant(
  [
    [[[3]],[[4]]],
    [[[5]],[[6]]]
  ]
  ,tf.float32
)

# 某一函数针对sigma的导数
out=tf.constant(
  [
    [
      [[-1],[1]],
      [[2],[-2]]
    ]
  ]
  ,tf.float32
)


# 针对未知变量的导数的方向计算
inputValue=tf.nn.conv2d_backprop_input((1,3,3,1),kernel,out,[1,1,1,1],'VALID')

session=tf.Session()

print(session.run(inputValue))
[[[[ -3.]
  [ -1.]
  [ 4.]]

 [[ 1.]
  [ 1.]
  [ -2.]]

 [[ 10.]
  [ 2.]
  [-12.]]]]

2.已知输入张量,对未知卷积核求导

假设已知3行3列的张量x和未知的2行2列的卷积核K

Tensorflow提供函数tf.nn.conv2d_backprop_filter实现valid卷积对未知卷积核的求导,以上示例的代码如下:

import tensorflow as tf

# 输入张量
x=tf.constant(
  [
    [
      [[1],[2],[3]],
      [[4],[5],[6]],
      [[7],[8],[9]]
    ]
  ]
  ,tf.float32
)

# 某一个函数F对sigma的导数
partial_sigma=tf.constant(
  [
    [
      [[-1],[-2]],
      [[-3],[-4]]
    ]
  ]
  ,tf.float32
)

# 某一个函数F对卷积核k的导数
partial_sigma_k=tf.nn.conv2d_backprop_filter(x,(2,2,1,1),partial_sigma,[1,1,1,1],'VALID')

session=tf.Session()

print(session.run(partial_sigma_k))
[[[[-37.]]

 [[-47.]]]


 [[[-67.]]

 [[-77.]]]]

二. same卷积的梯度

1.已知卷积核,对输入张量求导

假设有3行3列的已知张量x,2行2列的未知卷积核K

import tensorflow as tf

# 卷积核
kernel=tf.constant(
  [
    [[[3]],[[4]]],
    [[[5]],[[6]]]
  ]
  ,tf.float32
)

# 某一函数针对sigma的导数
partial_sigma=tf.constant(
  [
    [
      [[-1],[1],[3]],
      [[2],[-2],[-4]],
      [[-3],[4],[1]]
    ]
  ]
  ,tf.float32
)


# 针对未知变量的导数的方向计算
partial_x=tf.nn.conv2d_backprop_input((1,3,3,1),kernel,partial_sigma,[1,1,1,1],'SAME')

session=tf.Session()

print(session.run(inputValue))
[[[[ -3.]
  [ -1.]
  [ 4.]]

 [[ 1.]
  [ 1.]
  [ -2.]]

 [[ 10.]
  [ 2.]
  [-12.]]]]

2.已知输入张量,对未知卷积核求导

假设已知3行3列的张量x和未知的2行2列的卷积核K

import tensorflow as tf

# 卷积核
x=tf.constant(
  [
    [
      [[1],[2],[3]],
      [[4],[5],[6]],
      [[7],[8],[9]]
    ]
  ]
  ,tf.float32
)

# 某一函数针对sigma的导数
partial_sigma=tf.constant(
  [
    [
      [[-1],[-2],[1]],
      [[-3],[-4],[2]],
      [[-2],[1],[3]]
    ]
  ]
  ,tf.float32
)


# 针对未知变量的导数的方向计算
partial_sigma_k=tf.nn.conv2d_backprop_filter(x,(2,2,1,1),partial_sigma,[1,1,1,1],'SAME')

session=tf.Session()

print(session.run(partial_sigma_k))
[[[[ -1.]]

 [[-54.]]]


 [[[-43.]]

 [[-77.]]]]

以上这篇Tensorflow 卷积的梯度反向传播过程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python sys模块sys.path使用方法示例
Dec 04 Python
Python正则表达式的使用范例详解
Aug 08 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
python实现用户答题功能
Jan 17 Python
python中subprocess批量执行linux命令
Apr 27 Python
使用Python OpenCV为CNN增加图像样本的实现
Jun 10 Python
ipad上运行python的方法步骤
Oct 12 Python
Windows下PyCharm2018.3.2 安装教程(图文详解)
Oct 24 Python
python银行系统实现源码
Oct 25 Python
手把手教你进行Python虚拟环境配置教程
Feb 03 Python
pandas分批读取大数据集教程
Jun 06 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 #Python
用Python做一个久坐提醒小助手的示例代码
Feb 10 #Python
Python3 元组tuple入门基础
Feb 09 #Python
Python3列表List入门知识附实例
Feb 09 #Python
Python 动态变量名定义与调用方法
Feb 09 #Python
python函数定义和调用过程详解
Feb 09 #Python
详解python 破解网站反爬虫的两种简单方法
Feb 09 #Python
You might like
MySQL数据源表结构图示
2008/06/05 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
php中strtotime函数用法详解
2014/11/15 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
[IE&FireFox兼容]JS对select操作
2007/01/07 Javascript
基于JQuery实现相同内容合并单元格的代码
2011/01/12 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
浅析node.js中close事件
2014/11/26 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
jquery 遍历数组 each 方法详解
2016/05/25 Javascript
JS排序算法之希尔排序与快速排序实现方法
2017/12/12 Javascript
JS处理一些简单计算题
2018/02/24 Javascript
JavaScript引用类型Array实例分析
2018/07/24 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python中turtle作图示例
2017/11/15 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
实例讲解python中的协程
2018/10/08 Python
Kali Linux安装ipython2 和 ipython3的方法
2019/07/11 Python
python判断是空的实例分享
2020/07/06 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
Stefania Mode美国:奢华设计师和时尚服装
2018/01/07 全球购物
城野医生官方海外旗舰店:风靡亚洲毛孔收敛水
2018/04/26 全球购物
马来西亚排名第一的宠物用品店:Pets Wonderland
2020/04/16 全球购物
欠款纠纷起诉状
2015/05/19 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
OpenCV图像变换之傅里叶变换的一些应用
2021/07/26 Python
Golang入门之计时器
2022/05/04 Golang