在tensorflow中获得优势

时间:2018-12-16 06:39:02

标签: python tensorflow machine-learning kaggle

我想用张量流构建一个简单的机器学习模型,以便我能够理解机器学习的过程并能够自己做些事情。

我决定使用的数据集来自kaggle。

https://www.kaggle.com/andonians/random-linear-regression/version/2

由于我是初学者,所以我不想将数据集分为训练和验证两部分。

我的代码如下

train=train.reindex(np.random.permutation(train.index))
train['x']=train['x']/(train['x'].max())
train['y']=train['y']/(train['y'].max())
train_features=np.array(train[['x']])

train_label=np.array(train[['y']])

train_features=tf.convert_to_tensor(train_features)
train_label=tf.convert_to_tensor(train_label)

w=tf.convert_to_tensor(tf.Variable(tf.truncated_normal([1,700],mean=0.0,stddev=1.0,dtype=tf.float64)))

b=tf.convert_to_tensor(tf.Variable(tf.zeros(1,dtype=tf.float64)))
def cal(x,y):
prediction=tf.add(tf.matmul(w,x),b)
error=tf.reduce_mean(tf.square(y-prediction))
return [prediction,error]
y,cost=cal(train_features,train_label)

learning_rate=0.05

epochs=3000

init=tf.global_variables_initializer()
optimize=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

with tf.Session() as sess:

sess.run(init)
for i in list(range(epochs)):
sess.run(optimize)
print(sess.run(cost))

但是我得到的输出是nan。一直到3,000行(历元为3000)。

我似乎无法弄清楚原因。 我什至尝试在不进行标准化的情况下运行它,即未在0到1之间转换值。我还将学习率降低到0.0005。但这似乎没有效果。

谢谢。

P.S。-我尚未包括测试仪,因为我首先要训练并查看其是否有效。我待会再添加。

1 个答案:

答案 0 :(得分:0)

注意:由于没有人回答我的问题并且我自己想出了答案,因此我决定回答我的问题,以防有人遇到相同的问题。

1)运行程序时收到的nan值是因为原始数据集具有nan值。为了解决这个问题

train.dropna(inplace=True)

这应该清除nan值。

2) w 的大小应与 x 的大小匹配。对于单个功能,让 x 的大小为(m,1)。那么 w 的大小将为(1,m)。这本质上是矩阵乘法。