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网页解析利器BeautifulSoup安装使用介绍
Mar 17 Python
Python使用爬虫猜密码
Feb 19 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
May 15 Python
使用python实现ftp的文件读写方法
Jul 02 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
给 TensorFlow 变量进行赋值的方式
Feb 10 Python
Python趣味入门教程之循环语句while
Aug 26 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
python 实现性别识别
Nov 21 Python
python ConfigParser库的使用及遇到的坑
Feb 12 Python
python如何查找列表中元素的位置
May 30 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
php简单获取复选框值的方法
2016/05/11 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
Express的路由详解
2015/12/10 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
JS实现简单拖拽效果
2017/06/21 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
python模拟登录并且保持cookie的方法详解
2017/04/04 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
2019/08/22 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
基于OpenCV的路面质量检测的实现
2020/11/04 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
Linux内核产生并发的原因
2016/11/08 面试题
七年级英语教学反思
2014/01/15 职场文书
一名老师的自我评价
2014/02/07 职场文书
《九色鹿》教学反思
2014/02/27 职场文书
工厂搬迁方案
2014/05/11 职场文书
走群众路线学习笔记
2014/11/06 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
给医院的感谢信
2015/01/21 职场文书
家长对孩子的寄语
2015/02/26 职场文书
2015年教师党员自我评价材料
2015/03/04 职场文书
2015年营销工作总结范文
2015/04/23 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android