Python 参数值在tensorflow中的tf.Session()之外可用吗?

Python 参数值在tensorflow中的tf.Session()之外可用吗?,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我是tensorflow的新手,我正在学习本教程,该教程旨在训练神经网络 我的问题是: (1) 我现在知道tf.Session用于训练和评估NN。但是,如果在sess之外(例如,线从#样本从后面开始),优化程序训练的参数值是否仍然可用?(它们是全局变量还是sess中的局部变量)。或者它仍然可用,因为它使用相同的SES? 如果我想使用这些参数来评估我的目标函数,我总是可以简单地用sess.run调用它们?如果我的代码中有几个训练步骤呢 (2) 此代码使用所有培训数据进行一次更新,对吗?我可以换成

我是tensorflow的新手,我正在学习本教程,该教程旨在训练神经网络

我的问题是:

(1) 我现在知道tf.Session用于训练和评估NN。但是,如果在sess之外(例如,线从#样本从后面开始),优化程序训练的参数值是否仍然可用?(它们是全局变量还是sess中的局部变量)。或者它仍然可用,因为它使用相同的SES? 如果我想使用这些参数来评估我的目标函数,我总是可以简单地用sess.run调用它们?如果我的代码中有几个训练步骤呢

(2) 此代码使用所有培训数据进行一次更新,对吗?我可以换成新加坡元吗?(为什么此处使用AdmaOptimizer而不是Backprop?) 对于这个变分辍学问题,辍学者将在培训和测试课程中保留。AdmaOptimizer和Backprop是否能够自动考虑辍学?(看起来很聪明…)或者如果我使用Backprop会有问题吗

(3) 培训程序仅通过tf更新定义的变量。变量(本例中的M和M)是否正确?那些中间变量呢?(本例中为W)

谢谢

(1)由于使用相同的SES,它是否仍然可用

对。变量在创建会话时初始化。它们甚至不存在于会话之外。如果您在一个会话中训练了一个网络,然后想要运行推理,那么它就和sess一样简单。运行([your_output\u op],feed\u dict=…)

请注意,tensorflow中实际上有4种类型的张量(数据):

1) 占位符-
tf.placeholder(…)
-这些是需要使用feed\u dict传递到网络中的张量。请注意,如果在计算中不使用占位符,则不需要传递它。最明显的例子是你的标签,这是在培训期间需要的,而不是推理时间

2) 变量-
tf.Variable(…)
-这些是可变的张量,在调用
sess.run()
(关闭会话后没有任何东西保留)。一个常见的例子是神经网络的权重

3) 运算(计算张量)tf.add(a,b)-运算(operation)是计算图的一部分。损失函数的结果就是一个例子。这些值在调用
sess.run
期间不会保留,而是在调用
sess.run
期间动态计算(如果需要)

4) 常量-
tf.常量(42)
,顾名思义

(2)优化器是OP(tensorflow操作),它实际根据backprop更新权重变量。优化器(如Adam、SGD、Rmsprop等)将更新所有GraphKeys.TRAINABLE_变量(所有可训练变量的默认集合),但是,当您变得更高级时,您可以具体定义优化器更新哪些变量(当您遇到此类用例时,它们是非常重要的用例)。请注意,Adam是许多此类优化器之一。简单SGD(随机梯度下降)是另一个这样的优化器。将亚当视为SGD的更精致版本

(3)试着打印出所有可训练的变量,看看有什么。以下是优化器默认操作的变量:

可训练变量集合是tensorflow中的标准约定。大多数tensorflow操作都会知道默认情况下是否应该将变量添加到可训练的_变量中,并在不需要担心的情况下做正确的事情。任何时候使用
tf.Variable(…)
定义权重时,默认情况下,您创建的变量将添加到可训练变量集合中

with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(10000):
    sess.run(train_step, {model_X: X, model_y: y})
    if i % 100 == 0:
        mse = sess.run(model_mse, {model_X: X, model_y: y})
        print("Iteration {}. Mean squared error: {:.4f}.".format(i, mse))

# Sample from the posterior.
n_post = 1000
Y_post = np.zeros((n_post, X_pred.shape[0]))
for i in range(n_post):
    Y_post[i] = sess.run(model_pred, {model_X: X_pred})