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实现爬取千万淘宝商品的方法
Jun 30 Python
使用Python写CUDA程序的方法
Mar 27 Python
python下setuptools的安装详解及No module named setuptools的解决方法
Jul 06 Python
python基本语法练习实例
Sep 19 Python
Python学习笔记之if语句的使用示例
Oct 23 Python
Python编程之Re模块下的函数介绍
Oct 28 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
Python定时器线程池原理详解
Feb 26 Python
Python基于进程池实现多进程过程解析
Apr 30 Python
python随机模块random的22种函数(小结)
May 15 Python
如何使用python自带IDLE的几种方法
Oct 10 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动态创建Flash动画
2006/10/09 PHP
十天学会php之第八天
2006/10/09 PHP
PHP session有效期问题
2009/04/26 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
webpack配置proxyTable时pathRewrite无效的解决方法
2018/12/13 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
python实现异步回调机制代码分享
2014/01/10 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
python超简单解决约瑟夫环问题
2015/05/12 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
tensorflow常用函数API介绍
2020/04/19 Python
Python 2.6.6升级到Python2.7.15的详细步骤
2020/12/14 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
如何在Canvas中添加事件的方法示例
2019/05/21 HTML / CSS
工作时间上网检讨书
2014/02/03 职场文书
ktv好的活动方案
2014/08/17 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
焦点访谈观后感
2015/06/11 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
一篇文章带你深入了解Mysql触发器
2021/08/02 MySQL