在TensorFlow或Theano中,你只需告诉库你的神经网络是如何构造的,以及前馈应该如何操作。
例如,在TensorFlow中,你会写下以下代码:
例如,在TensorFlow中,你会写下以下代码:
with graph.as_default():
_X = tf.constant(X)
_y = tf.constant(y)
hidden = 20
w0 = tf.Variable(tf.truncated_normal([X.shape[1], hidden]))
b0 = tf.Variable(tf.truncated_normal([hidden]))
h = tf.nn.softmax(tf.matmul(_X, w0) + b0)
w1 = tf.Variable(tf.truncated_normal([hidden, 1]))
b1 = tf.Variable(tf.truncated_normal([1]))
yp = tf.nn.softmax(tf.matmul(h, w1) + b1)
loss = tf.reduce_mean(0.5*tf.square(yp - _y))
optimizer = tf.train.GradientDescentOptimizer(0.5).minimize(loss)
我正在使用L2范数损失函数,C = 0.5 * sum((y-yp)^2),在反向传播步骤中需要计算导数,dC = sum(y-yp)。请参见本书第30页。
我的问题是:TensorFlow(或Theano)如何知道反向传播的解析导数?还是它们进行逼近?还是以某种方式不使用导数?
我已经完成了TensorFlow的深度学习Udacity课程,但我仍然不知道这些库的工作原理。