主要内容

加速

选择加速计算梯度的近似者对象基于神经网络

自从R2022a

    描述

    例子

    newAppx=加速(oldAppx,useAcceleration)返回新神经元函数近似者对象newAppx有相同的配置与原始对象,oldAppx,选择加速梯度计算设置为逻辑值useAcceleration

    例子

    全部折叠

    创建的观察和操作规范对象(或者使用getObservationInfogetActionInfo从环境中提取规范对象)。在这个例子中,定义一个观察空间两个渠道。第一通道进行连续四维空间的观察。第二个带有离散标量观测,可以是0或1。最后,行动空间是一个三维向量在一个连续的行动空间。

    1 obsInfo = [rlNumericSpec ([4]) rlFiniteSetSpec ([0 1]];actInfo = rlNumericSpec (1 [3]);

    评论家,内近似核反应能量函数创建一个复发性神经网络。输出层的值必须是一个标量表示执行动作的观察。

    定义每个网络路径层对象数组。得到的尺寸从环境中观察和行动空间规范对象,并指定一个输入层的名称,所以您稍后可以显式地将它们与适当的信道环境。因为网络是复发,使用sequenceInputLayer作为输入层,包括一个lstmLayer的另一个网络层。

    %定义路径inPath1 = [sequenceInputLayer (刺激(obsInfo (1) .Dimension),Name =“netObsIn1”)fullyConnectedLayer (Name =“infc1”));inPath2 = [sequenceInputLayer (刺激(obsInfo (2) .Dimension),Name =“netObsIn2”)fullyConnectedLayer (Name =“infc2”));inPath3 = [sequenceInputLayer (刺激(actInfo (1) .Dimension),Name =“netActIn”)fullyConnectedLayer (Name =“infc3”));%连接3沿着昏暗的上一层输出1jointPath = = [concatenationLayer(1、3、名称“有条件现金转移支付”)tanhLayer lstmLayer (8,“OutputMode”,“序列”)fullyConnectedLayer (Name =“jntfc”));%添加层网络对象网= layerGraph;网= addLayers(净,inPath1);网= addLayers(净,inPath2);网= addLayers(净,inPath3);网= addLayers(净,jointPath);%连接层网= connectLayers(网络,“infc1”,“有条件现金转移支付/三机一体”);网= connectLayers(网络,“infc2”,“有条件现金转移支付/ in2”);网= connectLayers(网络,“infc3”,“有条件现金转移支付/ in3”);%的阴谋网络情节(净)

    图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

    %转换为dlnetwork和显示数量的权重网= dlnetwork(净);总结(净)
    初始化:可学的真正的数字:832输入:1“netObsIn1”序列输入4维度2“netObsIn2”序列输入1维3 netActIn的序列与三维输入

    创建的评论家rlQValueFunction使用网络,观察和操作规范对象。

    评论家= rlQValueFunction(网络,obsInfo,actInfo,ObservationInputNames = [“netObsIn1”,“netObsIn2”),ActionInputNames =“netActIn”);

    返回的值行动作为当前的观测,函数使用getValue评估

    val =评估(评论家,{兰特(obsInfo (1) .Dimension),兰特(obsInfo (2) .Dimension),兰特(actInfo (1) .Dimension)})
    val =1 x1单元阵列{[0.1360]}

    当你使用评估,结果是一个单元素单元阵列包含输入的行动的价值,考虑到观察。

    val {1}
    ans =0.1360

    计算的总和的梯度三输出对于输入,给定一个随机观察。

    gro =梯度(评论家,“出力”,{兰特(obsInfo (1) .Dimension),兰特(obsInfo (2) .Dimension),兰特(actInfo (1) .Dimension)})
    gro =3×1单元阵列{4 x1单}{[0.0243]}{3 x1单}

    结果是一个单元阵列和尽可能多的元素输入通道的数量。每个元素包含输出之和的衍生品对每个组件的输入通道。显示元素的梯度对第二通道。

    gro {2}
    ans =0.0243

    获得五个独立的梯度对序列,每一个由九个连续观测。

    gro_batch =梯度(评论家,“出力”,{兰德([obsInfo (1)。维度5 9]),兰特([obsInfo (2)。维度5 9]),兰特([actInfo (1)。维度5 9])})
    gro_batch =3×1单元阵列{4 x5x9单一}{1 x5x9单}{3 x5x9单一}

    显示的和输出的导数对第三观测元素的第一个输入通道,第七个顺序观察独立第四批。

    gro_batch {1} (3、4、7)
    ans =0.0108

    设置选项加速梯度计算。

    评论家=加速(评论家,真的);

    计算输出之和的梯度参数,得到一个随机观察。

    grp =梯度(评论家,“输出参数”,{兰特(obsInfo (1) .Dimension),兰特(obsInfo (2) .Dimension),兰特(actInfo (1) .Dimension)})
    grp =11×1单元阵列{5 x4单}{5 x1单}{5 x1单}{5 x1单}{5 x3单}{5 x1单}{32 x15单一}{32×8个}{32 x1单}{[0.0444 0.1280 -0.1560 0.0193 0.0262 0.0453 -0.0186 -0.0651]}{[1]}

    每个数组中的单元格包含输出之和的梯度对一组参数。

    grp_batch =梯度(评论家,“输出参数”,{兰德([obsInfo (1)。维度5 9]),兰特([obsInfo (2)。维度5 9]),兰特([actInfo (1)。维度5 9])})
    grp_batch =11×1单元阵列{5 x4单}{5 x1单}{5 x1单}{5 x1单}{5 x3单}{5 x1单}{32 x15单一}{32×8个}{32 x1单}{[2.6325 10.1821 -14.0886 0.4162 2.0677 5.3991 0.3904 -8.9048]}{[45]}

    如果你使用一批输入,梯度使用整个输入序列(在本例中9步骤),和所有的梯度对独立批尺寸(在本例中5)加在一起。因此,返回的梯度总是一样的大小的输出getLearnableParameters

    创建的观察和操作规范对象(或者使用getObservationInfogetActionInfo从环境中提取规范对象)。在这个例子中,定义一个观察空间两个渠道。第一通道进行连续四维空间的观察。第二个带有离散标量观测,可以是0或1。最后,行动空间由一个标量可以1,0,或1

    1 obsInfo = [rlNumericSpec ([4]) rlFiniteSetSpec ([0 1]];actInfo = rlFiniteSetSpec ([1 0 1]);

    创建一个深层神经网络作为近似模型内的演员。输出层必须有三个元素,每一个表达的值执行相应的动作,观察。要创建一个递归神经网络,使用sequenceInputLayer作为输入层,包括一个lstmLayer的另一个网络层。

    %定义路径inPath1 = [sequenceInputLayer (prod (obsInfo (1) .Dimension)) fullyConnectedLayer (prod (actInfo.Dimension),名称=“fc1”));inPath2 = [sequenceInputLayer (prod (obsInfo (2) .Dimension)) fullyConnectedLayer (prod (actInfo.Dimension),名称=“取得”));%连接之前的路径输出第一个维度jointPath = = [concatenationLayer(1、2、名称“有条件现金转移支付”)tanhLayer;lstmLayer (8, OutputMode =“序列”);fullyConnectedLayer (刺激(元素个数(actInfo.Elements)),Name =“jntfc”);];%添加层网络对象网= layerGraph;网= addLayers(净,inPath1);网= addLayers(净,inPath2);网= addLayers(净,jointPath);%连接层网= connectLayers(网络,“fc1”,“有条件现金转移支付/三机一体”);网= connectLayers(网络,“取得”,“有条件现金转移支付/ in2”);%的阴谋网络情节(净)

    图包含一个坐标轴对象。坐标轴graphplot类型的对象包含一个对象。

    %转换为dlnetwork和显示权重的数量网= dlnetwork(净);总结(净)
    初始化:可学的真正的数字:386输入:1“sequenceinput”序列输入4维度2“sequenceinput_1”序列输入1维度

    因为每个元素执行的概率输出层必须代表一个可能的软件自动添加一个操作softmaxLayer最后输出层如果不显式地指定它。

    创建的演员rlDiscreteCategoricalActor观察和行动规范,使用网络和对象。网络有多个输入层时,会自动与环境相关的观测通道根据尺寸规格obsInfo

    演员= rlDiscreteCategoricalActor(网,obsInfo, actInfo);

    返回一个向量的概率为每个可能的行动,使用评估

    (概率、州)=评估(演员,{兰特(obsInfo (1) .Dimension),兰特(obsInfo (2) .Dimension)});概率{1}
    ans =3 x1单一列向量0.3403 0.3114 0.3483

    返回一个行动的抽样分布,使用getAction

    行动= getAction(演员,{兰特(obsInfo (1) .Dimension),兰特(obsInfo (2) .Dimension)});行为{1}
    ans = 1

    设置选项加速梯度计算。

    演员=加速(演员,真的);

    每个数组中的单元格包含输出之和的梯度对一组参数。

    grp_batch =梯度(演员,“输出参数”,{兰德([obsInfo (1)。维度5 9]),兰特([obsInfo (2)。维度5 9])})
    grp_batch =9×1单元阵列{[-3.0043 -4.0248 -3.6952 -4.2051 e-09 e-09 e-09 e-09]} {[-1.0353 e-08]} {[-7.9828 e-09]} {[-2.2359 e-08]} {32 x2单}{32×8个}{32 x1单}{3×8个}{3 x1单}

    如果你使用一批输入,梯度使用整个输入序列(在本例中9步骤),和所有的梯度对独立批尺寸(在本例中5)加在一起。因此,返回的梯度总是一样的大小的输出getLearnableParameters

    输入参数

    全部折叠

    选择使用加速度梯度计算,指定为一个逻辑值。当useAcceleration真正的,梯度计算加速优化和缓存一些automatic-differentiation所需的输入,计算图。有关更多信息,请参见深度学习功能定制培训循环的加速

    输出参数

    全部折叠

    新演员或批评,作为一个近似者对象返回相同的类型oldAppx但随着梯度加速选项设置useAcceleration

    版本历史

    介绍了R2022a