У меня проблема с тем, почему существует смещение для каждого элемента вывода.Я знал только 1 смещение для выхода нейрона.Есть ли какие-либо преимущества и недостатки?
Я попытался использовать одно смещение для каждого узла вывода.это дает мне немного хороший результат.
Но когда я использовал смещение для каждого выходного элемента, это дало мне 98% + точность.
Я немного запутался, как это на самом делеработает и работает ли она для любой нейронной сети?
Спасибо!
import tensorflow as tf
import time
import numpy as np
X = tf.placeholder(tf.float32, shape=[4,2], name = 'X')
Y = tf.placeholder(tf.float32, shape=[4,1], name = 'Y')
W = tf.Variable(tf.truncated_normal([2,2]), name = "W")
w = tf.Variable(tf.truncated_normal([2,1]), name = "w")
c = tf.Variable(tf.zeros([4,2]), name = "c")
b = tf.Variable(tf.zeros([4,1]), name = "b")
with tf.name_scope("hidden_layer") as scope:
h = tf.nn.relu(tf.add(tf.matmul(X, W),c))
with tf.name_scope("output") as scope:
y_estimated = tf.sigmoid(tf.add(tf.matmul(h,w),b))
with tf.name_scope("loss") as scope:
loss = tf.reduce_mean(tf.squared_difference(y_estimated, Y))
with tf.name_scope("train") as scope:
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(loss)
INPUT_XOR = [[0,0],[0,1],[1,0],[1,1]]
OUTPUT_XOR = [[0],[1],[1],[0]]
init = tf.global_variables_initializer()
sess = tf.Session()
writer = tf.summary.FileWriter("./logs/xor_logs", sess.graph)
sess.run(init)
t_start = time.clock()
for epoch in range(100001):
sess.run(train_step, feed_dict={X: INPUT_XOR, Y: OUTPUT_XOR})
if epoch % 10000 == 0:
print("_"*80)
print('Epoch: ', epoch)
print(' y_estimated: ')
for element in sess.run(y_estimated, feed_dict={X: INPUT_XOR, Y: OUTPUT_XOR}):
print(' loss: ', sess.run(loss, feed_dict={X: INPUT_XOR, Y: OUTPUT_XOR}))
t_end = time.clock()
print("_"*80)
print('Elapsed time ', t_end - t_start)
'' '