Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 3.x 获取Tensorflow代码内部的Keras LSTM输出_Python 3.x_Tensorflow_Keras_Lstm - Fatal编程技术网

Python 3.x 获取Tensorflow代码内部的Keras LSTM输出

Python 3.x 获取Tensorflow代码内部的Keras LSTM输出,python-3.x,tensorflow,keras,lstm,Python 3.x,Tensorflow,Keras,Lstm,我正在研究时变图嵌入,在每个时间步,图的邻接矩阵都会发生变化。其主要思想是通过查看一组节点特征和邻接矩阵来执行图的每个时间步的节点嵌入。节点嵌入步骤既长又复杂,不是问题的核心部分,因此我将跳过这一部分。可以说,我使用图卷积网络来嵌入节点 假设我有一堆大小为NxN的B邻接矩阵a,其中B=批量大小,N=图中的节点数。此外,矩阵根据时间序列进行堆叠,其中索引i中的矩阵位于索引i+1中的矩阵之前。我已经嵌入了图的节点,这导致了一个维数为bxnxe的矩阵,其中E=嵌入的大小(参数)。请注意,模型必须处理任

我正在研究时变图嵌入,在每个时间步,图的邻接矩阵都会发生变化。其主要思想是通过查看一组节点特征和邻接矩阵来执行图的每个时间步的节点嵌入。节点嵌入步骤既长又复杂,不是问题的核心部分,因此我将跳过这一部分。可以说,我使用图卷积网络来嵌入节点

假设我有一堆大小为NxN的B邻接矩阵a,其中B=批量大小,N=图中的节点数。此外,矩阵根据时间序列进行堆叠,其中索引i中的矩阵位于索引i+1中的矩阵之前。我已经嵌入了图的节点,这导致了一个维数为bxnxe的矩阵,其中E=嵌入的大小(参数)。请注意,模型必须处理任何图形,因此,N不是参数。另一个重要的评论是,每个批次包含来自同一个图的邻接矩阵,因此一个批次的所有矩阵具有相同的节点数,但其他批次的矩阵可能具有不同的节点数

我现在需要通过LSTM单元传递这些嵌入。我以前从未使用过Keras,所以我很难将Keras LSTM融入到Tensorflow代码中。我想做的是:通过LSTM传递每个节点嵌入,使时间步数=B和LSTM批量大小=N,也就是说,我的LSTM的输入具有[N,B,E]形状,其中N和B仅通过执行时间知道。我希望我的LSTM的输出具有[B,E*E]的形状。嵌入矩阵在这里称为self.embedded\u mat。这是我的密码:

def\LSTM\u层(自):
使用tf.variable\u scope(self.scope,reuse=tf.AUTO\u reuse)、tf.device(self.device):
in_shape=tf.shape(self.embed_mat)
lstm_input=tf.重塑(self.embed_mat[in_shape[1],in_shape[0],embed_SIZE])#lstm=[N,B,E]
input\u plh=K.placeholder(name=“lstm\u input”,shape=(无,无,嵌入大小))
lstm=lstm(嵌入大小*嵌入大小,输入形状=(无,无,嵌入大小))
get_output=K.函数(输入=[input_plh],输出=[lstm(input_plh)])
h=获取输出([lstm\U输入])
我对K函数部分有点迷茫。我想要的是LSTM单元的输出张量。我已经看到,为了在Keras中实现这一点,我们需要使用K函数,但我不太明白它的作用。当我调用get_output([lstm_input])时,我得到以下错误:

tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'worker_global/A/shape' with dtype int64 and shape [?]
这里,A是维数为BxNxN的堆叠邻接矩阵。这是怎么回事?在图形构建步骤中是否需要知道N的值?我想我在LSTM手机上犯了一些愚蠢的错误,但我不知道它是什么


提前谢谢

如果您希望在keras Sequential()模型(称为“model”)中获得LSTM层的输出“out”,给定输入“inp”,其中“inp”是您的第一个/输入层,“out”是LSTM层,就本例而言,它恰好位于顺序模型的第四个位置,您可以使用以下代码从上面称为“LSTM_input”的数据中获得该LSTM层的输出:

inp = model.layers[0].input

out = model.layers[3].output

inp_to_out = K.function([inp], [out])

output = inp_to_out([lstm_input])

如果您希望在keras Sequential()模型(称为“model”)中获得LSTM层的输出“out”,给定输入“inp”,其中“inp”是您的第一个/输入层,“out”是LSTM层,就本例而言,它恰好位于顺序模型的第四位,您可以使用以下代码从上面称为“LSTM_input”的数据中获得该LSTM层的输出:

inp = model.layers[0].input

out = model.layers[3].output

inp_to_out = K.function([inp], [out])

output = inp_to_out([lstm_input])