是否可以使用内置张量流函数作为神经网络的激活?

时间:2017-03-17 11:03:08

标签: tensorflow

例如,以下代码是否会出现实现错误?

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中使用内置的tensorflow函数构建任何激活函数?

换句话说,我的问题是,每个张量流数学运算都会附带其梯度信息吗?

1 个答案:

答案 0 :(得分:0)

我会这样想:给定一些任意函数可以计算梯度吗?那不是。它取决于函数,并且在某种程度上取决于它的组成部分是如何在tensorflow中实现的。

特别是,代码中的成本只是一个平方的错误丢失,已知它具有全局最小值。

使用一些tweek来运行代码:

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