波士顿教程中的Tensorflow分歧损失

时间:2017-09-06 18:14:40

标签: tensorflow linear-regression

我真的被这个特定的例子所困扰。所以,我想知道是否有人遇到过同样的问题。 This是我遇到问题的教程页面。当我执行; regressor.train(input_fn=get_input_fn(training_set), steps=5000)行,损失呈指数级变化。因此,我在最后收到的权重不会产生真实的预测。由于整个示例处于 as 状态,因此我无法干预该过程。

当我使用Theta = pinv(X'*X) * X' * y应用正规方程时,我对Theta的预测是:

[33.624  17.714  21.796  33.601  12.852  19.621]

以及教程中提出的结果是:

[33.30348587  17.04452896  22.56370163  34.74345398  14.55953979   19.58005714]

似乎正规方程产生几乎正确的输出。我设计了自己的模型,它只包含一个神经元,而且损失仍然与教程模型完全不同。然后我应用均值归一化和特征缩放,设法将损失收敛到局部最小值。但是当我将权重与预测集相乘时,它会产生无效的负面结果。

我的问题是,我该如何解决这个问题?

编辑:以下是代码:

training_set = csvread('boston_train.csv');
training_set = training_set(2:end,:);
training_set = training_set(:,1:10);

首先修剪第一行,因为它包含无意义的数据。并修剪最后2列,其中只包含未存储在csv文件中的0。可能是csvread函数的一个小问题。

y = training_set(:,10);
X = training_set(:,1:9);

提取的输出和功能。

m = size(X,1);
X_norm = featureNormalize(X);
X = [ones(m,1) X_norm];
Theta = zeros(n,1); # Zero initialize the weight vector.
alpha= 0.01; # Learning rate.

应用特征缩放和均值归一化。

[Theta,losses]= gradientDescent(X, y, Theta, alpha, 5000);
fprintf('Final Loss computed = %f\n', losses(end));

损失将在16.551243附近。

predict_set = csvread('boston_predict.csv');
predict_set = predict_set(:,1:9);
predict_set= predict_set(2:end,:);
ps_size = size(predict_set,1);
predict_set=[ones(ps_size,1) predict_set];

对predict_set进行一些预处理以消除冗余值。

predictions = predict_set * Theta

得到的矢量是:

  57.254
 -96.769
 -39.343
 -10.582
 -111.768
 -88.005

0 个答案:

没有答案