Unable to perform assignment because the indices on the left side are not compatible with the size of the right side.

조회 수: 12 (최근 30일)
Hi, I got an error and I don't know why it happened.
The error is "Unable to perform assignment because the size of the left side is 6-by-7-by-1-by-128 and the size of the right side is 768-by-7".
Here are the details of my network:
I find that the error occurred at the 7th layer ("new_reshape_layer")
This layer is a functionLayer:
new_reshape_layer = functionLayer(@(X) dlarray(reshape(X,[],7,1,1),"SSCB"),Name='new_reshape_layer',Formattable=true,Acceleratable=true);
I also try to use
features = activations(net,X,layer)
to get the output of each layer, and the output is
No.1 layer: 14 x 150
No.2 layer: 128 x 150
No.3 layer: 128 x 150
No.4 layer: 128 x 150
No.5 layer: 128 x 150
No.6 layer: 42 x 150
No.7 layer: error happened:
Unable to perform assignment because the size of the left side is 6-by-7-by-1-by-128 and the size of the right side is 768-by-7.
Error in DAGNetwork/calculateActivations>iDoInference (line 156)
Y(indices{:}) = reshapeFcn(Yb, numel(info.MiniBatchIdx));
Error in DAGNetwork/calculateActivations (line 90)
Y = iDoInference(dispatcher, numObservations, predictNetwork, gpuShouldBeUsed, ...
Error in DAGNetwork/activations (line 257)
Y = this.calculateActivations(X, layerIndex, layerOutputIndex, nameValuePairs{:});
Error in DNNTest_reshape67_2_functionlayer (line 61)
activations_after7 = activations(new_net, xtest, 'new_reshape_layer');
I don't know why this error happened and how to get into the network to debug it.

채택된 답변

Joss Knight
Joss Knight 2023년 6월 22일
편집: Joss Knight 2023년 6월 22일
If you click on the line number in the editor next to where you create your function layer, you can put a breakpoint at the entry point to the function itself, which will allow you to debug.
Your function layer is not correct because it assumes the batch size is 1 when it reshapes. So the output array is pre-allocated as 6-by-7-by-1-by-numObservations; but your first batch of 128 observations is getting reshaped to 768-by-7-by-1-by-1.
Because this network includes a fully connected layer, it cannot have an output that varies in size in the spatial dimensions. Perhaps you intended your function layer to be defined instead as:
new_reshape_layer = functionLayer(@(X) dlarray(reshape(X,6,7,1,[]),"SSCB"),Name='new_reshape_layer',Formattable=true,Acceleratable=true);

추가 답변 (1개)

Richard
Richard 2023년 6월 22일
The functionLayer you created will only work with inputs that have a batch size of 1 - it is reshaping the input to K x 7 x 1 x 1. You are then using the network with a batch size of 128.
You need to use a resize shape that keeps the batch size from the input: Try this instead:
new_reshape_layer = functionLayer(@(X) dlarray(reshape(X,size(X,1)/7,7,1,size(X, 2)),"SSCB"),Name='new_reshape_layer',Formattable=true,Acceleratable=true);

카테고리

Help CenterFile Exchange에서 Image Data Workflows에 대해 자세히 알아보기

제품


릴리스

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by