matlab实现成本函数的代码,代码格式为function [J grad] = nnCostFunction(nn_params, input_layer_size,hidden_layer_size,num_labels, X, y, lambda)
时间: 2024-06-10 13:07:26 浏览: 9
好的,这是一个关于 MATLAB 实现成本函数的问题。以下是代码:
function [J grad] = nnCostFunction(nn_params, input_layer_size, hidden_layer_size, num_labels, X, y, lambda)
Theta1 = reshape(nn_params(1:hidden_layer_size * (input_layer_size + 1)), hidden_layer_size, (input_layer_size + 1));
Theta2 = reshape(nn_params((1 + (hidden_layer_size * (input_layer_size + 1))):end), num_labels, (hidden_layer_size + 1));
m = size(X, 1);
J = 0;
Theta1_grad = zeros(size(Theta1));
Theta2_grad = zeros(size(Theta2));
X = [ones(m, 1) X];
z2 = X * Theta1';
a2 = sigmoid(z2);
a2 = [ones(m, 1) a2];
z3 = a2 * Theta2';
a3 = sigmoid(z3);
ny = num_labels;
Y = zeros(m, ny);
for i = 1:m
Y(i, y(i)) = 1;
end
J = (1 / m) * sum(sum(-Y .* log(a3) - (1 - Y) .* log(1 - a3))) + (lambda / (2 * m)) * sum(sum(Theta1(:,2:end) .^ 2)) + (lambda / (2 * m)) * sum(sum(Theta2(:,2:end) .^ 2));
d3 = a3 - Y;
d2 = (d3 * Theta2(:,2:end)) .* sigmoidGradient(z2);
delta1 = (d2' * X);
delta2 = (d3' * a2);
Theta1_grad = delta1 / m + (lambda / m) * [zeros(size(Theta1, 1), 1) Theta1(:,2:end)];
Theta2_grad = delta2 / m + (lambda / m) * [zeros(size(Theta2, 1), 1) Theta2(:,2:end)];
grad = [Theta1_grad(:) ; Theta2_grad(:)];
end
希望这个代码能够帮到你。