2017-09-24 35 views
0
import pandas as pd 
import numpy as np 
from pandas import DataFrame 
from random import shuffle 
import tensorflow as tf 

从CSV文件(IMDB数据集)以数据功能和标签重量和偏见让NaN的

data=pd.read_csv('imdb.csv') 
data.fillna(-1) 
features=data.loc[:,['actor_1_facebook_likes','actor_2_facebook_likes','actor_3_facebook_likes','movie_facebook_likes']].as_matrix() 
labels=data.loc[:,['imdb_score']].as_matrix() 


learning_rate=.01 
training_epochs=2000 
display_steps=50 
n_samples=features.size 

定义占位符:

inputX = tf.placeholder(tf.float32,[None,4]) 
inputY = tf.placeholder(tf.float32,[None,1]) 

定义权重和偏见。 权重和偏见现在是NaN。

w = tf.Variable(tf.zeros([4,4])) 
b = tf.Variable(tf.zeros([4])) 

y_values = tf.add(tf.matmul(inputX,w),b) 

运用神经网络:

y=tf.nn.softmax(y_values) 
cost=tf.reduce_sum(tf.pow(inputY-y,2))/2*n_samples 
optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

with tf.Session() as sess: 
      sess.run(tf.global_variables_initializer()) 
      for i in range(training_epochs): 
       sess.run(optimizer,feed_dict={inputX:features,inputY:labels}) 
       if (i) % display_steps==0: 
       cc=sess.run(cost,feed_dict={inputX:features,inputY:labels}) 
       print(sess.run(w,feed_dict={inputX:features,inputY:labels})) 

回答

1

你的学习速度过大(试着以1e-3)。 另外,你的神经网络不会学到任何东西,因为你从一个你的体重不能改变的状态开始:你已经将你的体重初始化为零,这是错误的。

你的权重初始化更改为随机值以这种方式:

w = tf.Variable(tf.truncated_normal([4,4])) 

,你就可以训练你的网络。 (偏差初始化为0即可)

+0

是的。我曾经用std = 1初始化权重,在几个纪元后权重将变成NAN,当我改变为std = 1e-2时,训练过程起作用。所以权重的初始化非常重要。 –