2017-02-18 10 views
1

Я попытался написать код тензорного потока для обучения образцов в первый раз, но, кажется, весовой коэффициент W и b всегда равны нулю после каждого этапа обучения.Tensorflow: использовать softmax в тренировке, получить результат W, b всегда всегда равным нулю?

Данные обучения очень просты, это 10000 выборок (x, y), когда 00.3, y = 1. Я импортировал эти данные из файла csv. TRAING данные накоп лен в CSV-файла показаны следующим образом (Есть 10000 данных в общей сложности):

0.487801884,1; 
    0.457740109,1; 
    0.092949029,-1; 
    0.704023173,1; 
    0.07851864,-1; 

Но когда я запускаю этот код и печати W и б в каждом шаге, я обнаружил, W, б всегда равна нулю, похоже, что они не прошли обучение. Результат обучения:

W= [[ 0. 0.]] 
    b= [ 0. 0.] 
    Epoch: 0000000001 cost= 0.821999985 W= [[ 0. 0.]] b= [ 0. 0.] 
    Optimization Finished! 
    Accuracy: 1.0 

Я запутался, кто-то может помочь мне найти то, что проблема Большое спасибо?! Кодекс attched здесь:

#coding=utf-8 
import tensorflow as tf 
import numpy 
import os 
import csv 
#training data sotred in csv file 
filename=open('D:\Program Files (x86)\logistic\sample.csv','r') 
reader=csv.reader(filename) 

t_X,t_Y=[],[] 

for i in reader: 
    t_X.append(i[0]) 
    t_Y.append(i[1]) 

t_X=numpy.asarray(t_X) 
t_Y=numpy.asarray(t_Y) 
t_XT=numpy.transpose([t_X]) 
t_YT=numpy.transpose([t_Y]) 

#Parameters 
learning_rate = 0.01 
training_epochs = 1 
batch_size=50 
display_step = 1 

#Input 
n_samples = t_X.shape[0] 

#print "n_samples:",n_samples 
x = tf.placeholder(tf.float32, [None, 1]) 
y = tf.placeholder(tf.float32, [None, 1]) 

#Weight 
W = tf.Variable(tf.zeros([1, 2])) 
b = tf.Variable(tf.zeros([2])) 

#model 
pred = tf.nn.softmax(tf.matmul(x, W) + b) 
cost = tf.reduce_mean(tf.square(y-pred)) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

init = tf.global_variables_initializer() 

with tf.Session() as sess: 
    sess.run(init) 

    for epoch in range(training_epochs): 
     avg_cost=0 
     total_batch=int(n_samples/batch_size) 

     i=0 
     #read training data and transfer it into (m,n) 
     for anc in range(total_batch): 
      m=numpy.asarray([t_X[i],t_X[i+1],t_X[i+2],t_X[i+3],t_X[i+4]]) 
      n=numpy.asarray([t_Y[i],t_Y[i+1],t_Y[i+2],t_Y[i+3],t_Y[i+4]]) 
      m=numpy.transpose([m]) 
      n=numpy.transpose([n]) 

      _,c=sess.run([optimizer,cost], feed_dict={x: m, y: n}) 

      i=i+batch_size 
      avg_cost += c/total_batch 

     if (epoch+1)%display_step==0:   
      print ("Epoch:",'%010d' % (epoch+1), "cost=", "{:.9f}".format(avg_cost),"W=",sess.run(W),"b=",sess.run(b)) 

    print ("Optimization Finished!") 

    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1)) 
    # Calculate accuracy 
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 
    print("Accuracy:", accuracy.eval(feed_dict={x: t_XT, y: t_YT}) 

)

ответ

0

Jep, можно ожидать, что это проблема с этим весом инициализацией:

#Weight 
W = tf.Variable(tf.zeros([1, 2])) 
b = tf.Variable(tf.zeros([2])) 

ваших весов должны быть инициализируется случайным образом;)

+0

Спасибо ! Я заменил эти два утверждения следующим образом: W = tf.Variable (tf.random_normal ([1, 2], dtype = tf.float32)) b = tf.Variable (tf.random_normal ([2], dtype = tf .float32)), и кажется, что он работает нормально сейчас :) –

+0

Отлично! Это общепринятая ошибка:) – rmeertens

+1

Если вы хотите узнать больше об этом поиске «нарушение симметрии нейронной сети» – Aaron

 Смежные вопросы

  • Нет связанных вопросов^_^