在DDPG演员和批评网络,使用时1×1卷积不像一个完全连接层(尽管它应该)。这是为什么呢?

1视图(30天)
假设(一些有效的原因),我的数据排列在第三维度。说
x =兰德(1米);
我需要处理这些数据使用深学习网络。的例子,让我们假设网络刚刚两层。我使用一个图像输入输入数据层:
imageInputLayer ([1 1 m],“归一化”,“没有”));
然后我使用卷积1×1层
convolution2dLayer ([1], n,“步”[1]);
这应该表现得像一个 完全连接层。但它不!可能是因为数据在第三维度?事实上,即使在这种情况下使用一个完全连接层并不像一个完全连接层!是,以下层提供意想不到的resutls。
fullyConnectedLayer (n);
只有当数据在第一或第二维度,全面连接层表现正常。但在这种情况下我不能用一个卷积层purpuse失败。
注意:我需要第一和第二维度用于其他目的……这就是为什么不等我沿着三维数据在这个例子。
= = = = = = = = = = = = = = = = = = = =
更新:这是一个最小的工作示例,您可以运行,看看自己只是一个例子…不是一个真正的应用程序)。
这是一个DDPG代理努力学习复制状态。换句话说,代理应该学会输出一个动作向量尽可能接近观测向量(非常简单)。为了这样做,我将奖励的消极规范行动和国家之间的差异(或观察)。那就是:
奖励=规范(行动(:)- obj.State (:));
这是环境的完整定义
classdefenv < rl.env.MATLABEnvironment
% %属性
属性
状态
结束
% %的方法
方法
函数obj = env(暗)
%初始化设置观察
ObservationInfo = rlNumericSpec(暗);%
ObservationInfo。LowerLimit = 1 (ObservationInfo.Dimension);%
ObservationInfo。UpperLimit = + 1 (ObservationInfo.Dimension);%
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%初始化动作设置
ActionInfo = rlNumericSpec(暗);%
ActionInfo。LowerLimit = 1 (ActionInfo.Dimension);%
ActionInfo。UpperLimit = + 1 (ActionInfo.Dimension);%
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
obj = obj@rl.env。MATLABEnvironment(ObservationInfo, ActionInfo);%这条线实现了RL env的内置函数
结束
函数(观察、奖励、结束,LoggedSignals) =一步(obj,行动)
奖励=规范(行动(:)- obj.State (:));
观察=重置(obj);
结束= false;
LoggedSignals = [];
结束
函数InitialObservation =重置(obj)%重置环境初始状态和输出初步观察
obsInfo = getObservationInfo (obj);
obj。兰德(obsInfo.Dimension)状态= 2 * 1;
InitialObservation = obj.State;
结束
结束
结束
这是一个测试函数,定义了两个简单的演员和评论家网络和列车网络
函数测试
k = 3;% k可以设置为1、2、或3
昏暗的= 1 (1、3);
暗(k) = 10;
% %创建环境
envObj = env(暗);
obsInfo = getObservationInfo (envObj);
actInfo = getActionInfo (envObj);
% - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + -
% %创造演员
actorNetwork = [
imageInputLayer(暗淡,“名字”,“观察”,“归一化”,“没有”)
fullyConnectedLayer (100“名字”,“ActorFC1”);reluLayer (“名字”,“ActorRelu1”)
fullyConnectedLayer (max(暗),“名字”,“ActorFC3”);tanhLayer (“名字”,“ActorTanh”));
actorOpts = rlRepresentationOptions (“LearnRate”1的军医,“GradientThreshold”1);
演员= rlDeterministicActorRepresentation (actorNetwork obsInfo actInfo,“观察”,{“观察”},“行动”,{“ActorTanh”},actorOpts);
% - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + -
% %创建评论家
statePath = [
imageInputLayer(暗淡,“名字”,“观察”,“归一化”,“没有”)
fullyConnectedLayer (100“名字”,“CriticStateFC2”));
actionPath = [
imageInputLayer(暗淡,“名字”,“行动”,“归一化”,“没有”)
fullyConnectedLayer (100“名字”,“CriticActionFC1”,“BiasLearnRateFactor”,0)];
commonPath = [
additionLayer (2“名字”,“添加”);reluLayer (“名字”,“CriticCommonRelu”)
fullyConnectedLayer (1,“名字”,“CriticOutput”));
criticNetwork = layerGraph ();
criticNetwork = addLayers (criticNetwork statePath);
criticNetwork = addLayers (criticNetwork actionPath);
criticNetwork = addLayers (criticNetwork commonPath);
criticNetwork = connectLayers (criticNetwork,“CriticStateFC2”,“添加/三机一体”);
criticNetwork = connectLayers (criticNetwork,“CriticActionFC1”,“添加/ in2”);
criticOpts = rlRepresentationOptions (“LearnRate”1 e - 3,“GradientThreshold”1);
评论家= rlQValueRepresentation (criticNetwork obsInfo actInfo,“观察”,{“观察”},“行动”,{“行动”},criticOpts);
% - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + -
% %创建代理
agentOpts = rlDDPGAgentOptions ();
agentOpts.NoiseOptions。方差= 0.1;
agentOpts.NoiseOptions。VarianceDecayRate = 1 e-5;
代理= rlDDPGAgent(演员、评论家、agentOpts);
% - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + -
% %培训
trainOpts = rlTrainingOptions (
“MaxEpisodes”,1000,
“MaxStepsPerEpisode”,100,
“ScoreAveragingWindowLength”10
“详细”,真的,
“阴谋”,“训练进步”,
“StopTrainingCriteria”,“AverageReward”,
“StopTrainingValue”,-0.01,
“SaveAgentCriteria”,“EpisodeReward”,
“SaveAgentValue”,-0.1);
火车(代理,envObj, trainOpts);%培训代理。
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
结束
你可以选择把随机数据维度1,2,或者3的设置 k 的树在最初的测试函数。因为使用一个完全连接层,restuls不应该是不同的。但是,这是一个阴谋 2
可以看到,在这种情况下,代理sucessfuly降低成本(增加奖励)。
现在,让 并看到结果
可以看到,在这种情况下,代理是蜿蜒的初始值。
这个示例使用完全连接层。但是,当 ,你可以完全连接层替换 你会得到相同的resutls卷积层。例如
fullyConnectedLayer (100“名字”,“ActorFC1”);
将会被
100年convolution2dLayer ([1],“名字”,“ActorFC1”);
= = = = = = = = = = = = = = = = = = = =
2的评论

登录置评。

答案(0)