【发布时间】:2017-06-09 10:47:01
【问题描述】:
我正在 MATLAB 中为我的研究项目学习神经网络(线性回归),这是我使用的代码的一部分。 问题是“theta”的值是 NaN,我不知道为什么。 你能告诉我错误在哪里吗?
function [theta, J_history] = gradientDescent(X, y, theta, alpha, num_iters)
theta = zeros(2, 1); % initialize fitting parameters
%GRADIENTDESCENT Performs gradient descent to learn theta
% theta = GRADIENTDESCENT(X, y, theta, alpha, num_iters) updates theta by
% taking num_iters gradient steps with learning rate alpha
% Initialize some useful values
m = length(y); % number of training examples
J_history = zeros(num_iters, 1);
for iter = 1:num_iters
theta = theta - ((alpha/m)*((X*theta)-y)' * X)';
end
end
% run gradient descent
theta = gradientDescent(X, y, theta, alpha, iterations);
【问题讨论】:
-
你能提供你给函数的输入参数的值吗?
-
@Cebri alpha = 0.01 和 num_iters = 1500 并且 (X, y) 都是 133×1 的列向量
-
鉴于这些输入值,for 循环中的行不应该工作。当您尝试在
X(size(X) = 133x1) 和theta(size(theta) = 2x1) 之间执行矩阵乘法时,您应该会收到Inner matrix dimensions must agree错误。另外,为什么你传入theta的值只是为了将它定义为一个零矩阵? -
@VladislavMartin 我尝试使用 X 和 y 的转置,它没有给我任何错误,但“theta”仍然具有 NaN 值。你能提出一个解决方案吗? Theta 是成本函数中的参数(权重),其初始值为零。每次迭代都会对其进行调整以最小化错误。这不是我的代码,我是从在线课程中获得的,我正在尝试根据我的应用程序对其进行修改。
-
好的,那么转置是什么?
标签: matlab neural-network linear-regression gradient-descent