Я попытался написать код тензорного потока для обучения образцов в первый раз, но, кажется, весовой коэффициент 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})
)
Спасибо ! Я заменил эти два утверждения следующим образом: W = tf.Variable (tf.random_normal ([1, 2], dtype = tf.float32)) b = tf.Variable (tf.random_normal ([2], dtype = tf .float32)), и кажется, что он работает нормально сейчас :) –
Отлично! Это общепринятая ошибка:) – rmeertens
Если вы хотите узнать больше об этом поиске «нарушение симметрии нейронной сети» – Aaron