Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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 在理解tensorflow代码示例中的lstm使用时遇到困难_Python_Tensorflow_Lstm_Recurrent Neural Network_Rnn - Fatal编程技术网

Python 在理解tensorflow代码示例中的lstm使用时遇到困难

Python 在理解tensorflow代码示例中的lstm使用时遇到困难,python,tensorflow,lstm,recurrent-neural-network,rnn,Python,Tensorflow,Lstm,Recurrent Neural Network,Rnn,为什么在任何训练迭代发生之前要计算pred变量?我希望在每次迭代的数据传递过程中(通过RNN()函数)都会生成pred 一定有什么我遗漏了。pred类似于函数对象吗?我已经查看了tf.matmul()的文档,它返回的是张量,而不是函数 完整资料来源: 代码如下: def RNN(x, weights, biases): # Prepare data shape to match `rnn` function requirements # Current data input s

为什么在任何训练迭代发生之前要计算
pred
变量?我希望在每次迭代的数据传递过程中(通过
RNN()
函数)都会生成
pred

一定有什么我遗漏了。
pred
类似于函数对象吗?我已经查看了
tf.matmul()
的文档,它返回的是张量,而不是函数

完整资料来源:

代码如下:

def RNN(x, weights, biases):

    # Prepare data shape to match `rnn` function requirements
    # Current data input shape: (batch_size, n_steps, n_input)
    # Required shape: 'n_steps' tensors list of shape (batch_size, n_input)

    # Unstack to get a list of 'n_steps' tensors of shape (batch_size, n_input)
    x = tf.unstack(x, n_steps, 1)

    # Define a lstm cell with tensorflow
    lstm_cell = rnn.BasicLSTMCell(n_hidden, forget_bias=1.0)

    # Get lstm cell output
    outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)

    # Linear activation, using rnn inner loop last output
    return tf.matmul(outputs[-1], weights['out']) + biases['out']

pred = RNN(x, weights, biases)

# Define loss and optimizer
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

# Evaluate model
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

# Initializing the variables
init = tf.global_variables_initializer()

Tensorflow代码有两个不同的阶段。首先,构建一个“依赖关系图”,其中包含将要使用的所有操作。请注意,在此阶段,您不处理任何数据。相反,您只需定义要执行的操作。Tensorflow正在注意操作之间的依赖关系

例如,为了计算
精度
,您需要首先计算
校正pred
,要计算
校正pred
,您需要首先计算
校正pred
,依此类推

因此,在所示的代码中,您所做的只是告诉tensorflow您需要什么操作。您已经将它们保存在一个“图形”数据结构中(这是一个tensorflow数据结构,基本上是一个包含所有数学运算和张量的bucket)

稍后,您将使用调用
sess.run([ops],feed_dict={inputs})
对数据运行操作

当您调用
sess.run
时,请注意您必须从图形中告诉它您想要什么。如果您要求
准确性

   sess.run(accuracy, feed_dict={inputs})
Tensorflow将尝试计算精度。它将看到
准确性
取决于
正确的pred
,因此它将尝试通过您定义的依赖关系图进行计算,依此类推

您所犯的错误是,您认为所列代码中的
pred
正在计算某些内容。不是。该行:

   pred = RNN(x, weights, biases)

只定义了操作及其依赖项。

谢谢,这很有帮助。最后一个问题:
RNN()
不是一个返回张量的函数吗。因此,
pred
应该是张量,对吗?从你的回答来看,不是,我也不知道如何。
pred
如何不使用
RNN()
函数返回张量?是否有我遗漏的语法?它确实返回一个张量。但是张量只是一个物体,它代表着将来会发生的一些计算。如果你打印这个张量,你会看到关于它的元信息,比如它的预期形状(如果它知道形状,它可能不知道,形状可能是动态的)。你不会得到张量的值。如果您想要张量的值,您需要让tensorflow使用
mytensors\u value\u作为\u a\u numpy\u array=sess.run(mytensor)
实际计算它。你需要传递张量来计算它。你可以像在这段代码中一样,把张量放在手边,或者你可以查找它们。