在文档中,我们训练了10个不同的神经网络,每个神经网络都使用不同的权重和偏置进行初始化。net 是用于构建神经网络的变量,x1 是训练数据集,t1 是训练中使用的已知标签,x2 是测试数据集,t2 是测试标签。每个神经网络存储在单元变量 NN{} 中。
训练后,使用测试集 t2 和 x2 进行评估。然而,mse计算使用的是 mse(net, t2, y2)。我认为正确的语句应该是 mse(NN{i}, t2, y2),因为 NN{} 是训练后的模型,而 net 只是一个结构。下面是链接中给出的代码。
函数调用应该是 mse(NN{i}, t2, y2) 而不是 mse(net, t2, y2) 吗?
net = feedforwardnet(10);numNN = 10;NN = cell(1, numNN);perfs = zeros(1, numNN);for i = 1:numNN fprintf('Training %d/%d\n', i, numNN); NN{i} = train(net, x1, t1); y2 = NN{i}(x2); perfs(i) = mse(net, t2, y2);end
回答:
mse是一个网络性能函数。它根据均方误差来衡量网络的性能。
perf = mse(net,t,y,ew)接受以下参数:
net神经网络t目标的矩阵或单元数组y输出的矩阵或单元数组ew错误权重(可选)
根据 mse 的文档。因此,第一个参数应该是 neural network 类型的一个结构,在该示例中 NN{i} 包含在 y2 中,因此是输出的矩阵。