2017-03-17 33 views
1

例如,以下代碼是否沒有執行錯誤?可以使用內置張量函數作爲神經網絡的激活嗎?

import tensorflow as tf 

x_data = [1, 2, 3] 
y_data = [1, 2, 3] 

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 

X = tf.placeholder(tf.float32, name="X") 
Y = tf.placeholder(tf.float32, name="Y") 

hypothesis = tf.maximum(tf.add(tf.mul(W, X), b),0) 
cost = tf.reduce_mean(tf.square(hypothesis - Y)) 

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1) 

train_op = optimizer.minimize(cost) 
_, cost_val = tf.Session.run([train_op, cost], feed_dict={X: x_data, Y: y_data}) 

注意在上面的代碼中,我使用`tf.maximum(tf.add(tf.mul(W,X),b)中,0)作爲到我不能肯定的其可執行性,因爲我不知道tf.maximum可以計算反向傳播。

更常見的問題是,是否可以通過tf.Session中的反向傳播來訓練由內置張量函數構造的任何激活函數?

我的問題換句話說,每張張量數學運算都帶有梯度信息嗎?

+1

我認爲[tf.nn.relu_layer(https://www.tensorflow.org/api_docs/python/tf/nn/relu_layer)就是你想? – xxi

+0

@xxi不一般。 – julypraise

回答

0

我會這樣想:給定一些任意函數可以計算出梯度嗎?那不會。它取決於功能,在某種程度上它的組成部分是如何在張量流中實現的。

尤其是,代碼中的代價只是一個平方誤差損失,其已知具有全局最小值。

一些tweeks您的代碼運行:

import tensorflow as tf 

x_data = [1, 2, 3] 
y_data = [1, 2, 3] 

W = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 
b = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) 

X = tf.placeholder(tf.float32, name="X") 
Y = tf.placeholder(tf.float32, name="Y") 

hypothesis = tf.maximum(tf.add(tf.multiply(W, X), b),0) 
cost = tf.reduce_mean(tf.square(hypothesis - Y)) 

optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.1) 

train_op = optimizer.minimize(cost) 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    _, cost_val = sess.run([train_op, cost], feed_dict={X: x_data, Y: y_data}) 
    print(cost_val) 

4.999 
相關問題