tensorflow中gradients的使用以及TypeError: Fetch argument None has invalid type <class 'NoneType'>错误解析

在反向传播过程中,神经网络需要对每一个loss对应的学习参数求偏导,算出的这个值也就是梯度,用来乘以学习率更新学习参数使用的,它是通过tensorflow中gradients函数使用的。

我们根据官方文档对函数原型进行解析

官方文档中函数原型以及参数如下:

tf.gradients(
    ys,
    xs,
    grad_ys=None,
    name=‘gradients‘,
    colocate_gradients_with_ops=False,
    gate_gradients=False,
    aggregation_method=None,
    stop_gradients=None,
    unconnected_gradients=tf.UnconnectedGradients.NONE
)

ys和xs都是张量或者张量列表。函数tf.gradients作用是在ys中对xs求导,求导的返回值是一个list,list的长度与xs的长度相同。

下面通过例子介绍函数的用法(这是李金洪老师那本书中举到的例子)

import tensorflow as tf
w1 = tf.Variable([[1,2]])
w2 = tf.Variable([[3,4]])

y = tf.matmul(w1, [[9],[10]])
grads = tf.gradients(y,[w1])

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    gradval = sess.run(grads)
    print(gradval)

运行这段代码会报错,报错为:

TypeError: Fetch argument None has invalid type <class ‘NoneType‘>

原因是Tensorflow gradients好像int型的Tensor 的gradients 把w1的设置成float类型的例如tf.float32 gards就能算了,而且tensorflow梯度值一般都是float32类型的。所以我们修改代码将整型的张量改为浮点型:

import tensorflow as tf
w1 = tf.Variable([[1.,2.]])
w2 = tf.Variable([[3.,4.]])

y = tf.matmul(w1, [[9.],[10.]])
grads = tf.gradients(y,[w1])

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    gradval = sess.run(grads)
    print(gradval)

输出结果为:

[array([[ 9., 10.]], dtype=float32)]

上面例子中,由于y是由w1与[[9],[10]]相乘而来,所以其导数也就是[[9],[10]](即斜率)。

注意:如果求梯度的式子中没有要求偏导的变量,系统会报错。例如,写成grads = tf.gradients(y,[w1,w2])。

tensorflow中gradients的使用以及TypeError: Fetch argument None has invalid type <class 'NoneType'>错误解析

原文地址:https://www.cnblogs.com/yangzepeng/p/11031208.html

时间: 2024-08-28 23:41:46

tensorflow中gradients的使用以及TypeError: Fetch argument None has invalid type <class 'NoneType'>错误解析的相关文章

TensorFlow tf.gradients的用法详细解析以及具体例子

tf.gradients 官方定义: tf.gradients( ys, xs, grad_ys=None, name='gradients', stop_gradients=None, ) Constructs symbolic derivatives of sum of ys w.r.t. x in xs. ys and xs are each a Tensor or a list of tensors. grad_ys is a list of Tensor, holding the gr

第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用于信道均衡.图像恢复.语音识别.地震学.无损探伤等未知输入估计和过程辨识方面的问题. 在神经网络的研究中,反卷积更多的是充当可视化的作用,对于一个复杂的深度卷积网络,通过每层若干个卷积核的变换,我们无法知道每个卷积核关注的是什么,变换后的特征是什么样子.通过反卷积的还原,可以对这些问题有个清晰的可视

Tensorflow中使用CNN实现Mnist手写体识别

本文参考Yann LeCun的LeNet5经典架构,稍加ps得到下面适用于本手写识别的cnn结构,构造一个两层卷积神经网络,神经网络的结构如下图所示: 输入-卷积-pooling-卷积-pooling-全连接层-Dropout-Softmax输出 第一层卷积利用5*5的patch,32个卷积核,可以计算出32个特征.然后进行maxpooling.第二层卷积利用5*5的patch,64个卷积核,可以计算出64个特征.然后进行max pooling.卷积核的个数是我们自己设定,可以增加卷积核数目提高

tensorflow中的一些语法问题

一.tf.range()生成数字序列 range()函数用于创建数字序列变量,有以下两种形式: range(limit, delta=1, dtype=None, name='range') range(start, limit, delta=1, dtype=None, name='range') 该数字序列开始于 start 并且将以 delta 为增量扩展到不包括 limit 时的最大值结束,类似python的range函数. 二.tf.expand_dims() TensorFlow中,

tensorflow中的共享变量(sharing variables)

为什么要使用共享变量? 当训练复杂模型时,可能经常需要共享大量的变量.例如,使用测试集来测试已训练好的模型性能表现时,需要共享已训练好模型的变量,如全连接层的权值. 而且我们还会遇到以下问题: 比如,我们创建了一个简单的图像滤波器模型.如果只使用tf.Variable,那么我们的模型可能如下 def my_image_filter(input_images): conv1_weights = tf.Variable(tf.random_normal([5, 5, 32, 32]), name="

【原创】关于flexviewer中引入图表时报的TypeError #1009解决方法

在自定义的widget中引入图表后,运行时出现TypeError #1009错误.本人网上查找了很多资料,其中大部分都是关于Flash中的动画效果问题,与这里的问题关系型不太大.故把问题的解决方法写在这里,与人方便,与己方便. 方法一: 1.在自定义的widget中添加如下两个方法: private function copyStyleFromParent(selector:String):void { var chartBaseStyle:CSSStyleDeclaration = style

CNN中的卷积核及TensorFlow中卷积的各种实现

声明: 1. 我和每一个应该看这篇博文的人一样,都是初学者,都是小菜鸟,我发布博文只是希望加深学习印象并与大家讨论. 2. 我不确定的地方用了"应该"二字 首先,通俗说一下,CNN的存在是为了解决两个主要问题: 1. 权值太多.这个随便一篇博文都能解释 2. 语义理解.全连接网络结构处理每一个像素时,其相邻像素与距离很远的像素无差别对待,并没有考虑图像内容的空间结构.换句话说,打乱图像像素的输入顺序,结果不变. 然后,CNN中的卷积核的一个重要特点是它是需要网络自己来学习的.这一点很简

调用tensorflow中的concat方法时Expected int32, got list containing Tensors of type &#39;_Message&#39; instead.

grid = tf.concat(0, [x_t_flat, y_t_flat, ones])#报错语句 grid = tf.concat( [x_t_flat, y_t_flat, ones],0) #楼主改后的代码 将数字放在后面,如果有三个参数 decoder_inputs = tf.concat([go_inputs, decoder_inputs_tmp], 1,name="dec_in") 调用tensorflow中的concat方法时Expected int32, got

(原)tensorflow中函数执行完毕,显存不自动释放

转载请注明出处: http://www.cnblogs.com/darkknightzh/p/7608916.html 参考网址: https://stackoverflow.com/questions/39758094/clearing-tensorflow-gpu-memory-after-model-execution https://github.com/tensorflow/tensorflow/issues/1727#issuecomment-285815312s tensorflo