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使用cPickle模块序列化实例
Sep 25 Python
详解Python中的__new__()方法的使用
Apr 09 Python
python监控文件或目录变化
Jun 07 Python
python 列表,数组,矩阵两两转换tolist()的实例
Apr 04 Python
Python 获取中文字拼音首个字母的方法
Nov 28 Python
python学生管理系统学习笔记
Mar 19 Python
Python简单处理坐标排序问题示例
Jul 11 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
python连接mongodb数据库操作数据示例
Nov 30 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 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
第十三节--对象串行化
2006/11/16 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
浅谈json_encode用法
2015/03/05 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
javascript prototype,executing,context,closure
2008/12/24 Javascript
JS字符串函数扩展代码
2011/09/13 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
用JS实现根据当前时间随机生成流水号或者订单号
2018/05/31 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
Python深入学习之上下文管理器
2014/08/31 Python
Python 判断是否为质数或素数的实例
2017/10/30 Python
python中kmeans聚类实现代码
2018/02/23 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
Python调用服务接口的实例
2019/01/03 Python
python实现剪切功能
2019/01/23 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
python之拟合的实现
2019/07/19 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
探矿工程师自荐信
2014/01/24 职场文书
两只小狮子教学反思
2014/02/05 职场文书
先进教师个人事迹材料
2014/12/15 职场文书
孩子满月酒答谢词
2015/09/30 职场文书
原生Js 实现的简单无缝滚动轮播图的示例代码
2021/05/10 Javascript