Я хочу попытаться решить дихотомическую проблему, которая x1 + x2 < 1
.
Есть проблема в том, что иногда вес сети не меняется. Но иногда это работает правильно. Это мой код.
import tensorflow as tf
import numpy as np
import random
x_ = tf.placeholder(tf.float32,shape=(None,2),name = 'input')
y_ = tf.placeholder(tf.float32,shape=(None,2),name='output')
w1 = tf.Variable(tf.truncated_normal([2,4],0.0,0.2))
b1 = tf.Variable(tf.truncated_normal([1,4],0.0,0.2))
w2 = tf.Variable(tf.truncated_normal([4,2],0.0,0.2))
b2 = tf.Variable(tf.truncated_normal([1,2],0.0,0.2))
a = tf.tanh(tf.matmul(x_,w1)+b1)
y = tf.tanh(tf.matmul(a,w2)+b2)
loss = -tf.reduce_mean(y_ * tf.log(tf.clip_by_value(y,1e-10,1.0)))
op = tf.train.AdamOptimizer(0.001)
tra = op.minimize(loss)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
aa = np.random.rand(100,2)
bb = np.random.rand(100,2)
for i in range(100):
t = int(aa[i][0]+aa[i][1]<1.0)
bb[i][t] = 1.0
bb[i][t^1] = 0.0
print(sess.run(w1))
for i in range(50000):
f = random.randint(0,10)
ae = aa[f*10:(f+1)*10]
be = bb[f*10:(f+1)*10]
sess.run(tra,feed_dict={x_:ae,y_:be})
if i%1000 == 999:
print(sess.run(w1))
e = sess.run(loss,feed_dict={x_:aa,y_:bb})
print(e)
Потеря иногда очень большая и не меняется. Я пытаюсь изменить способ инициализации, но он не работает. Я даже не знаю как найти где
проблема.