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基础教程之基本内置数据类型介绍
Feb 20 Python
Python selenium如何设置等待时间
Sep 15 Python
python flask几分钟实现web服务的例子
Jul 26 Python
Apache部署Django项目图文详解
Jul 30 Python
python设置随机种子实例讲解
Sep 12 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
python SVD压缩图像的实现代码
Nov 05 Python
Python函数式编程指南:对生成器全面讲解
Nov 19 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
Mar 12 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
Python如何给你的程序做性能测试
Jul 29 Python
Python如何执行系统命令
Sep 23 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截取指定2个字符之间字符串的方法
2015/04/15 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
php使用PDO获取结果集的方法
2017/02/16 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
Jquery 扩展方法
2010/05/06 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
简单理解JavaScript中的封装与继承特性
2016/03/19 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
vue单页缓存方案分析及实现
2018/09/25 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
django中send_mail功能实现详解
2018/02/06 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
深入理解Django自定义信号(signals)
2018/10/15 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
Python实现二维曲线拟合的方法
2018/12/29 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
基于python实现百度翻译功能
2019/05/09 Python
tensorflow之并行读入数据详解
2020/02/05 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
乐高官方旗舰店:LEGO积木玩具
2019/04/06 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
学校副校长四风对照检查材料整改措施
2014/09/25 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
红高粱观后感
2015/06/10 职场文书
信用卡工资证明范本
2015/06/19 职场文书
初一年级组工作总结
2015/08/12 职场文书
python和anaconda的区别
2022/05/06 Python