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 19 Python
Python3实现生成随机密码的方法
Aug 23 Python
编程语言Python的发展史
Sep 26 Python
python中使用序列的方法
Aug 03 Python
Python中%r和%s的详解及区别
Mar 16 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
虚拟机下载python是否需要联网
Jul 27 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 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新手上路(十二)
2006/10/09 PHP
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
php实现在线考试系统【附源码】
2018/09/18 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
JavaScript DOM 学习第二章 编辑文本
2010/02/19 Javascript
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
封装的jquery翻页滚动(示例代码)
2013/11/18 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
Bootstrap table的使用方法
2016/11/02 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
vue实现验证码输入框组件
2017/12/14 Javascript
Vue中JS动画与Velocity.js的结合使用
2019/02/13 Javascript
Python中的yield浅析
2014/06/16 Python
Python通过DOM和SAX方式解析XML的应用实例分享
2015/11/16 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python设计模式之简单工厂模式实例详解
2019/01/22 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
python如果快速判断数字奇数偶数
2019/11/13 Python
从numpy数组中取出满足条件的元素示例
2019/11/26 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
基于Python词云分析政府工作报告关键词
2020/06/02 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
python 常见的反爬虫策略
2020/09/27 Python
广告学专业推荐信范文
2013/11/23 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
2014年高中教师工作总结
2014/12/19 职场文书