Я пытался Логистическая классификация , используя тензор потока.
Я также пытался создать логистическую классификацию с набором голосовых данных , разделенным на мужчин и женщин.
Но результаты (стоимость, гипотеза) всегда отображаются как 'nan'
.
Кто-то ответил,
Если значение данных велико, то кажется, что журнал (гипотеза) находится в бесконечности,именно поэтому он находится вне диапазона представления типа float32.Я решил проблему, умножив W на 0,1 и уменьшив гипотезу.
Итак, я умножил W
на 0,1 .
W = tf.multiply(tf.Variable(tf.random_normal([20,1]), name='weight'), [0.1])
Но проблемане было исправлено.
Интересно, в чем проблема.На самом деле, это первый раз, когда я кодирую.
Это необработанный набор данных, который я использовал.
Я хочу, чтобы кто-то помог мне!
import tensorflow as tf
import numpy as np
tf.set_random_seed(777)
xy=np.loadtxt('voice.csv', delimiter=',', dtype=np.float)
x_data=xy[:, 0:-1]
y_data=xy[:, [-1]]
print(x_data.shape, x_data, len(x_data))
print(y_data.shape, y_data)
X = tf.placeholder(tf.float32, shape=[None, 20])
Y = tf.placeholder(tf.float32, shape=[None, 1])
W = tf.Variable(tf.random_normal([20, 1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) *
tf.log(1 - hypothesis))
train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for step in range(10001):
cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data})
if step % 200 == 0:
print(step, cost_val)
h, c, a = sess.run([hypothesis, predicted, accuracy],
feed_dict={X: x_data, Y: y_data})
print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)