Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TypeError使用GradientTape.gradient计算渐变_Python_Tensorflow_Gradient_Recurrent Neural Network_Hessian - Fatal编程技术网

Python TypeError使用GradientTape.gradient计算渐变

Python TypeError使用GradientTape.gradient计算渐变,python,tensorflow,gradient,recurrent-neural-network,hessian,Python,Tensorflow,Gradient,Recurrent Neural Network,Hessian,你好, 我目前正试图在Tensorflow 1.13.1中计算梯度,并使用中解释的GradientTape类,但我得到了一个TypeError:Fetch参数None具有无效类型 下面,我将包括两个简单的例子,其中我得到这个错误,只使用开箱即用的Tensorflow函数,第一个是简单的最小工作示例,第二个是我实际需要解决/解决的问题。为了完整起见,我使用的是Python 3.6.8 简单的 将tensorflow导入为tf tf.reset_default_graph() x=tf.常数([1,

你好,

我目前正试图在Tensorflow 1.13.1中计算梯度,并使用中解释的
GradientTape
类,但我得到了一个
TypeError:Fetch参数None具有无效类型

下面,我将包括两个简单的例子,其中我得到这个错误,只使用开箱即用的Tensorflow函数,第一个是简单的最小工作示例,第二个是我实际需要解决/解决的问题。为了完整起见,我使用的是Python 3.6.8

简单的
将tensorflow导入为tf
tf.reset_default_graph()
x=tf.常数([1,2,3.])
使用tf.GradientTape(persistent=True)作为gg:
gg.手表(x)
f1=tf.map\u fn(λa:a**2,x)
f2=x*x
#计算梯度
d_fx1=gg.梯度(f1,x)#导致误差的线
d_fx2=gg.梯度(f2,x)#无误差
del gg#删除永久梯度带
使用tf.Session()作为sess:
d1,d2=sess.run((d_fx1,d_fx2))
打印(d1、d2)
在此代码中,
f1
f2
以不同的方式计算,但给出相同的数组。然而,当试图计算与它们相关联的梯度时,第一行给出了以下错误,而第二行则完美无瑕。我在错误的堆栈跟踪下面报告

TypeError回溯(最近一次调用)
在()
15
16将tf.Session()作为sess:
--->17 d1,d2=sess.run((d_fx1,d_fx2))
18份打印件(d1、d2)
C:\HOMEWARE\Miniconda3-Windows-x86\u 64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py正在运行(self、fetches、feed\u dict、options、run\u元数据)
927尝试:
928结果=self.\u运行(无、取数、输入、选项、,
-->929运行(元数据)
930如果运行元数据:
931 proto_data=tf_session.tf_GetBuffer(run_metadata_ptr)
C:\HOMEWARE\Miniconda3-Windows-x86\u 64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py in\u run(self、handle、fetches、feed\u dict、options、run\u元数据)
1135#创建一个获取处理程序来处理获取的结构。
1136 fetch_handler=_FetchHandler(
->1137 self.\u图形、获取、馈送\u dict\u张量、馈送\u句柄=馈送\u句柄)
1138
1139#运行请求并获取响应。
C:\HOMEWARE\Miniconda3-Windows-x86\u 64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py in\uuuuuu init\uuuuuu(self、graph、fetches、feed、feed\u句柄)
469     """
470与graph.as_default():
-->471 self.\u fetch\u mapper=\u FetchMapper.for\u fetch(fetches)
472 self._fetches=[]
473自我目标=[]
C:\HOMEWARE\Miniconda3-Windows-x86\u 64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py in for\u fetch(fetch)
259 elif isinstance(获取,(列表,元组)):
260注意(touts):这也是namedtuples的代码路径。
-->261返回\u ListFetchMapper(获取)
262 elif isinstance(获取、集合、映射):
263返回_DictFetchMapper(fetch)
C:\HOMEWARE\Miniconda3-Windows-x86\u 64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py in uuuu init(self,fetches)
368     """
369自我获取类型=类型(获取)
-->370 self._mappers=[_FetchMapper.for_fetch(fetch)for fetch in fetches]
371 self.\u unique\u fetches,self.\u value\u index=\u uniquify\u fetches(self.\u映射器)
372
C:\HOMEWARE\Miniconda3-Windows-x86_64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py in(.0)
368     """
369自我获取类型=类型(获取)
-->370 self._mappers=[_FetchMapper.for_fetch(fetch)for fetch in fetches]
371 self.\u unique\u fetches,self.\u value\u index=\u uniquify\u fetches(self.\u映射器)
372
C:\HOMEWARE\Miniconda3-Windows-x86\u 64\envs\rdwsenv\lib\site packages\tensorflow\python\client\session.py in for\u fetch(fetch)
256如果fetch为None:
257 raise TypeError('获取参数%r具有无效类型%r'(获取,
-->258类型(取数)
259 elif isinstance(获取,(列表,元组)):
260注意(touts):这也是namedtuples的代码路径。
TypeError:获取参数None的类型无效
请注意,我也尝试过一次只计算一个梯度,即使用
persistent=False
,得到了相同的结果

实际需要 下面,我还将包括一个最小的工作示例,以重现我得到的相同错误,但试图解决我实际正在处理的问题

在这段代码中,我使用一个
RNN
来计算一些输入的输出w.r.t,我需要计算这个输出w.r.t输入的
jacobian

将tensorflow导入为tf
从tensorflow.keras.layers导入RNN、GRUCell
#定义变量的大小。TODO:适应数据
inp_dim=2
数量单位=50
批量大小=100
时间步长=10
#重置图形,以避免错误
tf.reset_default_graph()
#构建模型
输入=tf.ones(形状=(时间步、批次大小、输入尺寸))
#跟随梯度计算
将tf.GradientTape()作为g:
g、 手表(输入)
单元格=[GRUCell(num\u单位),GRUCell(num\u单位)]
rnn=rnn(单元格,时间=真,返回序列=真)
f=rnn(输入)
d_fx=g.batch_雅可比矩阵(f,输入)
#运行图
使用tf.Session()作为sess:
sess.run(tf.global\u variables\u initializer())
梯度=sess.run(d_fx)
渐变形状
关于堆栈跟踪,我得到了相同的错误,但行数较少(此堆栈跟踪中有一行
用于_fetch
\u init
较少)。为完整起见,我仍将其包括在下面

TypeError回溯(最近一次调用)
在()
25将tf.Session()作为sess:
26 sess.run(tf.global\u variables\u initializer())
--->27年级=社会科学硕士。
import tensorflow as tf
from tensorflow.keras.layers import RNN, GRUCell, Dense

# Define size of variable. TODO: adapt to data
inp_dim = 2
num_units = 50
batch_size = 100
timesteps = 10

# Reset the graph, so as to avoid errors
tf.reset_default_graph()

inputs = tf.ones(shape=(timesteps, batch_size, inp_dim))

### Building the model
cells = [GRUCell(num_units), GRUCell(num_units)]
rnn = RNN(cells, time_major=True, return_sequences=True)
final_layer = Dense(1, input_shape=(num_units,))

# Apply to inputs
last_state = rnn(inputs)
f = final_layer(last_state)

[derivs] = tf.gradients(f, inputs)

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