Tensorflow – 图是如何执行的?

我试图在权重变化时获取激活函数的输出。当权重变化时,我期望激活函数也随之变化。

我在激活函数之前简单地更改权重,然后激活值也随之变化了。

import tensorflow as tfdef sigmoid(x, derivative = False):    if derivative == True:        return (1.0/(1+tf.exp(-x))) * (1.0 - (1.0/(1+tf.exp(-x))))    return 1.0/(1+tf.exp(-x))def dummy(x):    weights['h0'] = tf.assign(weights['h0'], tf.add(weights['h0'], 0.1))    res = tf.add(weights['h0'], x)    res = sigmoid(res)    return res# build computational grapha = tf.placeholder('float', None)d = dummy(a)weights = {    'h0': tf.Variable(tf.random_normal([1]))}# initialize variablesinit = tf.global_variables_initializer()# create session and run the graphwith tf.Session() as sess:    sess.run(init)    for i in range(10):        print (sess.run(d, feed_dict={a: [2]}))# close sessionsess.close()

但是,当我尝试在激活函数之后更改权重,比如在反向传播中,每次得到的激活值都是相同的。谁能解释一下这是怎么回事,以及我该怎么做才能让激活值在每次迭代后都发生变化?

import tensorflow as tfdef sigmoid(x, derivative = False):    if derivative == True:        return (1.0/(1+tf.exp(-x))) * (1.0 - (1.0/(1+tf.exp(-x))))    return 1.0/(1+tf.exp(-x))def dummy(x):    res = tf.add(weights['h0'], x)    res = sigmoid(res)    weights['h0'] = tf.assign(weights['h0'], tf.add(weights['h0'], 0.1))    return res# build computational grapha = tf.placeholder('float', None)d = dummy(a)weights = {    'h0': tf.Variable(tf.random_normal([1]))}# initialize variablesinit = tf.global_variables_initializer()# create session and run the graphwith tf.Session() as sess:    sess.run(init)    for i in range(10):        print (sess.run(d, feed_dict={a: [2]}))# close sessionsess.close()

编辑:

看起来它并没有运行整个图?我可以这样做:

with tf.Session() as sess:    sess.run(init)    for i in range(10):        sess.run(weights['h0'])        print (sess.run(d, feed_dict={a: [2]}))

我运行了权重并且得到了不同的值。这是正确的吗?


回答:

这一行并没有做你认为它应该做的事情:

    print (sess.run(d, feed_dict={a: [2]}))

你需要调用 sess.run() 并传入一个训练操作,通常是优化器的 minimize() 函数。

以下是一些示例用法。

来自超简单的 Tensorflow MNIST 示例

  # 定义损失和优化器  y_ = tf.placeholder(tf.float32, [None, 10])  cross_entropy = tf.reduce_mean(      tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))  train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)  ...  for _ in range(1000):      ...      sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

来自 TensorFlow 多层神经网络示例

  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)  ...  for i in range(total_batch):      ...      _, c = sess.run([optimizer, cost], feed_dict={x: batch_x, y: batch_y})

一般的模式是:

  1. 定义成本函数 J。
  2. 将成本变量 J 添加到优化器中
  3. 调用 sess.run() 并将优化器变量作为参数传递。

如果你想编写自己的优化器,那么你需要采取不同的方法。编写自己的成本函数是常见的,但编写自己的优化器则不常见。你应该查看 AdamOptimizerGradientDescentOptimizer 的代码以获得见解。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注