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 装饰器功能以及函数参数使用介绍
Jan 27 Python
django开发之settings.py中变量的全局引用详解
Mar 29 Python
Python使用sorted排序的方法小结
Jul 28 Python
Python语言实现将图片转化为html页面
Dec 06 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
使用python 3实现发送邮件功能
Jun 15 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
Numpy之reshape()使用详解
Dec 26 Python
Python range与enumerate函数区别解析
Feb 28 Python
matplotlib 三维图表绘制方法简介
Sep 20 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
PHP 数字左侧自动补0
2008/03/31 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
动态表格Table类的实现
2009/08/26 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
JavaScript的MVVM库Vue.js入门学习笔记
2016/05/03 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
移动端js触摸事件详解
2016/09/18 Javascript
jQuery在header中设置请求信息的方法
2017/03/06 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
微信小程序 swiper组件构建轮播图的实例
2017/09/20 Javascript
JS跳转手机站url的若干注意事项
2017/10/18 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
[47:42]完美世界DOTA2联赛PWL S2 GXR vs Ink 第一场 11.19
2020/11/20 DOTA
python使用点操作符访问字典(dict)数据的方法
2015/03/16 Python
python 制作自定义包并安装到系统目录的方法
2018/10/27 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
Gap英国官网:Gap UK
2018/07/18 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
岗位职责的构建方法
2014/02/01 职场文书
安全生产月活动总结
2014/05/04 职场文书
2015年初中生自我评价范文
2015/03/03 职场文书
花木兰观后感
2015/06/10 职场文书
小学运动会加油词
2015/07/18 职场文书