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使用marshal模块序列化实例
Sep 25 Python
python用来获得图片exif信息的库实例分析
Mar 16 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
Oct 18 Python
解决安装python库时windows error5 报错的问题
Oct 21 Python
python读取各种文件数据方法解析
Dec 29 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
使用opencv中匹配点对的坐标提取方式
Jun 04 Python
超级实用的8个Python列表技巧
Aug 24 Python
Python的信号库Blinker用法详解
Dec 31 Python
python ConfigParser库的使用及遇到的坑
Feb 12 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
php 操作excel文件的方法小结
2009/12/31 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
2014/06/10 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
node express使用HTML模板的方法示例
2019/08/22 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
python3实现短网址和数字相互转换的方法
2015/04/28 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
python 重命名轴索引的方法
2018/11/10 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python matlab库简单用法讲解
2020/12/31 Python
Django url 路由匹配过程详解
2021/01/22 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
志愿者服务感言
2014/02/27 职场文书
社区春季防火方案
2014/06/02 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
初级党校心得体会
2014/09/11 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2014年除四害工作总结
2014/12/06 职场文书
初中优秀学生评语
2014/12/29 职场文书
岳麓书院导游词
2015/02/03 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
行政处罚告知书
2015/07/01 职场文书
师德培训心得体会2016
2016/01/09 职场文书
导游词之南京夫子庙
2019/12/09 职场文书