我想用张量流构建一个简单的机器学习模型,以便我能够理解机器学习的过程并能够自己做些事情。
我决定使用的数据集来自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。-我尚未包括测试仪,因为我首先要训练并查看其是否有效。我待会再添加。
答案 0 :(得分:0)
注意:由于没有人回答我的问题并且我自己想出了答案,因此我决定回答我的问题,以防有人遇到相同的问题。
1)运行程序时收到的nan值是因为原始数据集具有nan值。为了解决这个问题
train.dropna(inplace=True)
这应该清除nan值。
2) w 的大小应与 x 的大小匹配。对于单个功能,让 x 的大小为(m,1)。那么 w 的大小将为(1,m)。这本质上是矩阵乘法。