I received this error in DDPG "Model input sizes must match the dimensions specified in the corresponding observation and action info specifications."
12 次查看(过去 30 天)
显示 更早的评论
hi every body
i want to impliment LSTM layers in state path of my critic network
my code is :
obsInfo = rlNumericSpec([42 1]);
obsInfo.Name = 'observation';
actInfo = rlNumericSpec([6 1]);
actInfo.Name = 'action';
actInfo.UpperLimit =0.01*ones(6,1);
actInfo.LowerLimit =-0.01*ones(6,1);
numObs=prod(obsInfo.Dimension) ;
numAcs=prod(actInfo.Dimension) ;
numHiddenUnits=100;
statePath = [sequenceInputLayer(numObs)
lstmLayer(numHiddenUnits,'OutputMode','sequence')
fullyConnectedLayer(500,'Name','CriticStateFC1')
reluLayer('Name', 'CriticStateRelu1')
fullyConnectedLayer(450,'Name','CriticStateFC2')
reluLayer('Name', 'CriticStateRelu2')
fullyConnectedLayer(300,'Name','CriticStateFC3')
reluLayer('Name', 'CriticStateRelu3')
fullyConnectedLayer(250,'Name','CriticStateFC4')
reluLayer('Name', 'CriticStateRelu4')
fullyConnectedLayer(200,'Name','CriticStateFC5')
reluLayer('Name', 'CriticStateRelu5')
fullyConnectedLayer(100,'Name','CriticStateFC6')
reluLayer('Name', 'CriticStateRelu6')
fullyConnectedLayer(50,'Name','CriticStateFC7')
reluLayer('Name', 'CriticStateRelu7')
fullyConnectedLayer(25,'Name','CriticStateFC8')
];
actionPath = [
sequenceInputLayer(numAcs)
fullyConnectedLayer(300,'Name','CriticActionFC1')
reluLayer('Name', 'CriticActionRelu1')
fullyConnectedLayer(250,'Name','CriticActionFC2')
reluLayer('Name', 'CriticActionRelu2')
fullyConnectedLayer(200,'Name','CriticActionFC3')
reluLayer('Name', 'CriticActionRelu3')
fullyConnectedLayer(100,'Name','CriticActionFC4')
reluLayer('Name', 'CriticActionRelu4')
fullyConnectedLayer(50,'Name','CriticActionFC5')
reluLayer('Name', 'CriticActionRelu5')
fullyConnectedLayer(25,'Name','CriticActionFC6')];
commonPath = [
concatenationLayer(1,2,Name='concat')
reluLayer('Name','CriticCommonRelu')
fullyConnectedLayer(512,'Name','CriticCommon1')
reluLayer('Name','CriticCommonRelu2')
fullyConnectedLayer(300,'Name','CriticCommon2')
reluLayer('Name','CriticCommonRelu3')
fullyConnectedLayer(1,'Name','CriticOutput')];
criticOpts =rlOptimizerOptions(LearnRate=1e-04,GradientThreshold=inf,...
L2RegularizationFactor=0.0001,Optimizer="adam");
criticNetwork = layerGraph();
criticNetwork = addLayers(criticNetwork,statePath);
criticNetwork = addLayers(criticNetwork,actionPath);
criticNetwork = addLayers(criticNetwork,commonPath);
criticNetwork = connectLayers(criticNetwork,'CriticStateFC8','concat/in1');
criticNetwork = connectLayers(criticNetwork,'CriticActionFC6','concat/in2');
criticNetwork = dlnetwork(criticNetwork);
analyzeNetwork(criticNetwork)
critic = rlQValueFunction(criticNetwork,obsInfo,actInfo,...
ObservationInputNames='observation',ActionInputNames='action',UseDevice="gpu");
when i run above code i received this error
"Error using rlQValueFunction
Model input sizes must match the dimensions specified in the corresponding observation
and action info specifications." please help me
0 个评论
回答(1 个)
Emmanouil Tzorakoleftherakis
2023-10-13
The easiest way to discover your error yourself is to use the default agent feature have use the network architecture that's automatically generated by Reinforcement Learning Toolbox. Please take a look here. Don't forget to indicate that you want your network to use LSTM layers in the initialization options.
Per the example in the link above, after the agent is created, you can extract the actor and critic and compare the generated architecture with what you have.
Hope this helps
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!