TensorFlow Стоимость Значение возврата NAN - PullRequest
0 голосов
/ 28 мая 2018

Я делаю простую модель логистической регрессии, используя Tensorflow.Но значение стоимости всегда возвращает nan.

Мои наборы данных делятся на x_data и y_data.x_data - это координата изображения, а y_data - 1 или 0, поскольку мое изображение черно-белое.Я пытаюсь найти разделительную линию между белым и черным цветом.

def train(input,iterations):
import tensorflow as tf
tf.set_random_seed(777)  # for reproducibility

x_data = []
y_data = []

i_dim = input.shape[0]
j_dim = input.shape[1]

for i in range(i_dim):
    for j in range(j_dim):
        x_data.append([j,i_dim-i-1])
        y_data.append([int(input[i,j])])

# placeholders for a tensor that will be always fed.
X = tf.placeholder(tf.float32, shape=[None, 2])
Y = tf.placeholder(tf.float32, shape=[None, 1])

W = tf.Variable(tf.random_normal([2, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

# Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)

# cost/loss function
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) *
                       tf.log(1 - hypothesis))

train = tf.train.AdamOptimizer(1e-4).minimize(cost)

# Launch graph
with tf.Session() as sess:
    # Initialize TensorFlow variables
    sess.run(tf.global_variables_initializer())

    for step in range(iterations):
        cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data})
        print(step, cost_val)

это мой журнал (0, nan) (1, nan) (2, nan) (3, nan) (4, nan) (5, nan) (6, nan) (7, nan) (8, nan) (9, nan) (10, nan) (11, nan) (12, nan) (13, nan) (14, nan) (15, nan) (16, nan) (17, nan) (18, nan) (19, nan) (20, nan)

и так далее

1 Ответ

0 голосов
/ 28 мая 2018

Когда ваша гипотеза равна 1, ваша вторая часть потерь становится Y * log (0), следовательно, выводом nan.Я предлагаю вам добавить небольшую константу внутри логарифма, и она должна работать.Попробуйте это

cost = -tf.reduce_mean(Y*(tf.log(hypothesis+1e-4))+(1-Y)*(tf.log(1-hypothesis+1e-4)))
...