MATLAB Deep Learning Toolbox Error: Invalid input data. Invalid number of spatial dimensions. Layer expects 0 but received 1.
Jun. 08, 2022
在使用MATLAB Deep Learning Toolbox在构建神经网络时,想要使用featureInputLayer
函数构建神经网络的特征输入层,用于接收数值特征,但是在进行custom training loop过程中使用forward
函数时报错。
精简后的测试代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
clc, clear
% define network
net = featureInputLayer(4, 'Name', 'inputLayer');
% convert layer graph to dlnetwork object
net = dlnetwork(net);
% specify formatted batch input
input = randn(4, 16);% 4, the number of the features; 16, batch size;
input = dlarray(input, 'SB');
% forward
result = forward(net, input);
完整报错信息:
1
2
3
4
5
6
7
8
Error using dlnetwork/validateForwardInputs
Layer 'inputLayer': Invalid input data. Invalid number of spatial dimensions. Layer expects 0 but received 1.
Error in dlnetwork/forward (line 555)
[x, doForwardExampleInputs] = validateForwardInputs(net, x, "forward");
Error in test2 (line 13)
result = forward(net, input);
报错原因:
dlarray
函数使用错误。根据MATLAB dlarray
函数官方文档1,当神经网络的输入为特征向量时,数值要转换为"CB"
格式的dlarray
,而不是"SB"
格式(我想当然认为是“Spatial-Batch”格式)。
因此,只需要将原代码的第10行改写如下代码即可。
1
input = dlarray(input, 'CB');
References