首页 Paddle框架 帖子详情
DDPG 如何输出连续动作的多维向量? 已解决
收藏
快速回复
Paddle框架 其他炼丹技巧学习资料 2523 16
DDPG 如何输出连续动作的多维向量? 已解决
收藏
快速回复
Paddle框架 其他炼丹技巧学习资料 2523 16

DDPG 算法 可以输出 在[0,1]范围内的 2维 向量吗? 比如 一般的ddpg 直接输出action=0.256,

我想可以输出一个二维向量吗 比如 [0.254,0.7456],这种用ddpg 可以实现吗,具体在ddpg的代码基础上怎么修改?

麻烦大佬给点建议?

DeepGeGe
已解决
2# 回复于2022-01
你是指原来的动作空间纬度是1,现在纬度变成2了? 直接将输出层节点数改成2个不就好了。。。
0
收藏
回复
全部评论(16)
时间顺序
DeepGeGe
#2 回复于2022-01

你是指原来的动作空间纬度是1,现在纬度变成2了?

直接将输出层节点数改成2个不就好了。。。

0
回复
DeepGeGe
#3 回复于2022-01

确定策略梯度只是策略网络输出的动作是确定的,而不是一个概率分布。至于输出的动作空间是多大,直接改输出层节点数就可以了。

0
回复
我在塘边哈
#6 回复于2022-01

老哥  我想问下, 最后一层是 nn.Sigmoid() 输出 在【0,1】 之间 ,我输出state【20,4000,2000,5000,200】  为什么 输出的action 总是

【0,1】,【1,1】,【1,0】,【0,0】。。 其中的一种 输出的并不是0到1小数。 但我把他们改成 state 输入[0.1,0.12,0.25,0.26,0.20] 却又正常了 , 输出的是【0.4544,0.5656】这个 比较正常的。  老哥 这是什么原因吗?

0
回复
DeepGeGe
#7 回复于2022-01

看你的描述,我估计是:

sigmoid虽然出理论上(0, 1),但是在实际实现时候会设置成当小于多少直接置零,大于多少直接等于1。

你输入[20, 4000, ...]等很大的数,导致计算到最后触发了上面的这个机制。因此一般会对输入进行归一化,确保各个纬度的量纲是一致的。

0
回复
我在塘边哈
#8 回复于2022-01
看你的描述,我估计是: sigmoid虽然出理论上(0, 1),但是在实际实现时候会设置成当小于多少直接置零,大于多少直接等于1。 你输入[20, 4000, ...]等很大的数,导致计算到最后触发了上面的这个机制。因此一般会对输入进行归一化,确保各个纬度的量纲是一致的。
展开

好的,我先按照您的方法试试,如果对输入做归一化处理的化,对实际的action决策的正确性质,可以保证吗?

0
回复
我在塘边哈
#9 回复于2022-01
好的,我先按照您的方法试试,如果对输入做归一化处理的化,对实际的action决策的正确性质,可以保证吗?

对了,有没有什么好用的归一化函数,懒得自己处理

0
回复
我在塘边哈
#10 回复于2022-01
好的,我先按照您的方法试试,如果对输入做归一化处理的化,对实际的action决策的正确性质,可以保证吗?

麻烦您看一下 有什么好办法

0
回复
玥亮
#11 回复于2022-01

这是正在做什么研究啊~

0
回复
DeepGeGe
#12 回复于2022-01
对了,有没有什么好用的归一化函数,懒得自己处理

可以简单地除以一个最大值-最小值,比如图片输入可以每个像素值均除以255。或者减去均值除以方差,等等。

0
回复
DeepGeGe
#13 回复于2022-01
[图片]麻烦您看一下 有什么好办法

这得实际去训练啊,训练完成之后这些值会慢慢趋于正常吧。不要拿在前面很大输入时候训练的参数。

0
回复
我在塘边哈
#14 回复于2022-01
DeepGeGe #13
这得实际去训练啊,训练完成之后这些值会慢慢趋于正常吧。不要拿在前面很大输入时候训练的参数。

老哥 ,请问您一个问题,我想用ddpg做一个如下的操作,输入state,输出10维向量(都是0,1)之间的数据,保证前5维的小数加在一起等于1,后5维度的小数加在一起等于1。action:【0.2,0.2,0.1,0.05,0.4,0.05,          0.25,0.3,0.25,0.1,0.1】

0
回复
DeepGeGe
#15 回复于2022-01
老哥 ,请问您一个问题,我想用ddpg做一个如下的操作,输入state,输出10维向量(都是0,1)之间的数据,保证前5维的小数加在一起等于1,后5维度的小数加在一起等于1。action:【0.2,0.2,0.1,0.05,0.4,0.05,          0.25,0.3,0.25,0.1,0.1】
展开

在网络forward前向计算函数中,将前5纬数据一起通过softmax函数,后5纬数据一起通过softmax函数,然后再分别输出就可以了。

0
回复
我在塘边哈
#16 回复于2022-01
DeepGeGe #15
在网络forward前向计算函数中,将前5纬数据一起通过softmax函数,后5纬数据一起通过softmax函数,然后再分别输出就可以了。

太感谢您了,老哥真的谢谢您。

0
回复
我在塘边哈
#17 回复于2022-01
太感谢您了,老哥真的谢谢您。

老哥按照您的方法实现了,您看一下对不对,就是还有这里的sigmoid函数还需不需要?

0
回复
DeepGeGe
#18 回复于2022-01
[图片] 老哥按照您的方法实现了,您看一下对不对,就是还有这里的sigmoid函数还需不需要?

应该不要更好。

0
回复
繁华落幕曲终离
#19 回复于2022-08
你是指原来的动作空间纬度是1,现在纬度变成2了? 直接将输出层节点数改成2个不就好了。。。

能够回答下我提出的那个问题吗,谢谢啦

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户