Tensorflow 波士顿教程中的张量流发散损失
我真的被这个特殊的例子绊住了。因此,我想知道是否有人面临同样的问题。是我遇到问题的教程页面。当我执行时<代码>回归器.train(input\u fn=get\u input\u fn(training\u set),步长=5000)行,损失呈指数发散。因此,我在最后得到的权重不会产生现实的预测。由于整个示例处于原样的状态,因此我无法干预该过程 当我用Tensorflow 波士顿教程中的张量流发散损失,tensorflow,linear-regression,Tensorflow,Linear Regression,我真的被这个特殊的例子绊住了。因此,我想知道是否有人面临同样的问题。是我遇到问题的教程页面。当我执行时回归器.train(input\u fn=get\u input\u fn(training\u set),步长=5000)行,损失呈指数发散。因此,我在最后得到的权重不会产生现实的预测。由于整个示例处于原样的状态,因此我无法干预该过程 当我用Theta=pinv(X'*X)*X'*y应用正态方程时,我用Theta进行的预测是: [33.624 17.714 21.796 33.601
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_集进行一些预处理以去除冗余值
predictions = predict_set * Theta
结果向量为:
57.254
-96.769
-39.343
-10.582
-111.768
-88.005