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使用scrapy解析js示例
Jan 23 Python
Python中的各种装饰器详解
Apr 11 Python
python利用拉链法实现字典方法示例
Mar 25 Python
Python logging管理不同级别log打印和存储实例
Jan 19 Python
详解tensorflow实现迁移学习实例
Feb 10 Python
pytorch获取vgg16-feature层输出的例子
Aug 20 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
Python3操作YAML文件格式方法解析
Apr 10 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 Python
python上selenium的弹框操作实现
Jul 13 Python
python使用建议与技巧分享(二)
Aug 17 Python
Python实现聚类K-means算法详解
Jul 15 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
Yii实现显示静态页的方法
2016/04/25 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
PHP 文件上传限制问题
2019/09/01 PHP
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
js对象的比较
2011/02/26 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
js获取或设置当前窗口url参数的小例子
2013/10/14 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
javascript实现简单的贪吃蛇游戏
2015/03/31 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
Vue表单验证插件的制作过程
2017/04/01 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
2016/06/07 Python
Python中property属性实例解析
2018/02/10 Python
Django开发中复选框用法示例
2018/03/20 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
python 字典的打印实现
2019/09/26 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
基于python检查矩阵计算结果
2020/05/21 Python
python访问hdfs的操作
2020/06/06 Python
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
详解window.open被浏览器拦截的解决方案
2019/07/18 HTML / CSS
直接有效的自我评价
2014/01/11 职场文书
最新大学生创业计划书写作攻略
2014/04/02 职场文书
网站客服岗位职责
2014/04/05 职场文书
大学教师师德师风演讲稿
2014/08/22 职场文书
四风个人对照检查材料思想汇报
2014/09/25 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
确保减税降费落地生根,用实实在在措施
2019/07/19 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
Python爬取英雄联盟MSI直播间弹幕并生成词云图
2021/06/01 Python
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript