pytorch问题汇总
仅用于记录平时碰到的问题。
torch与torchvision版本不对应
极智AI |
torch与torchvision版本对应关系速查 - 知乎 (zhihu.com)
Input
type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should
be the same or input should be a MKLDNN tensor and weight is a dense
tensor
不要直接tensor.to,要tensor=tensor.to,见问题解决:Input
type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should
be the-CSDN博客
朴素实现的人-物交互(HOI)检测-论文阅读
论文地址:https://openaccess.thecvf.com/content_ICCV_2019/papers/Gupta_No-Frills_Human-Object_Interaction_Detection_Factorization_Layout_Encodings_and_Training_Techniques_ICCV_2019_paper.pdf。
摘要
对于HOI检测任务,本文展示出一个相对简单的因子分解模型,它包含从预训练的目标检测器中构建出的外观(appearance,视觉外观特征)和布局编码(lay-out
encodings,用于表示布局信息的编码,可以用来描述目标在图像中的位置、排列、相对关系等),能够胜过更复杂的方法。本文的模型包括了一些因素,用于检测得分、人-物外观、粗粒度(coarse)布局(即box-pair
configuration,两个物体边界框对)和可选的细粒度(fine-grained)布局(即一些human
pose)。本文也提出了一些训练技巧来提高训练效率:①.消除训练-推理的错误匹配;②.拒绝在小批量训练中 ...
MFVFD 论文阅读
这篇2021年的论文是把MF和值分解结合起来。值分解知识参考:
[伏羲讲堂]多智能体强化学习中的值函数分解——VDN、QMIX、QTRAN
- 知乎 (zhihu.com)
摘要
在CTDE(centralized training and decentralized
execution,集中训练分布执行)的流行范式下,VFD(Value function
decomposition,值函数分解)方法促进了MARL的发展。但是呢,现在的根据组(group)的VFD只是用来解决合作问题。这篇论文提出,利用个体(individual)值分解,它们提出了MFVFD,一种利用平均场理论的多智能体Q学习方法。
介绍
在复杂的、非平稳的(non-stationary)的MARL环境下,要让决策照着全局最优方向走的话,就需要每个智能体感知环境和其他智能体。但是,要追求有效的MARL的话,有两个主要的挑战:智能体观测的局部性(不可能观测到全局)、可伸缩性的限制(我觉得还有不稳定性,比如一个智能体一直采用一样的动作,但获得奖励可能差别很大,因为奖励取决于联合动作)。特别地, ...
强化学习(十):Actor-Critic方法
这是当下RL最流行的算法之一。它把基于value的方法,特别是值函数近似,引入到了policy
gradient中,便得到了AC。AC方法仍然是一种PG方法。actor和critic分别代表什么意思呢?这里,actor指policy
update,因为策略是用来采取行动的;critic代表policy evaluation或value
estimation,是用来估计s和q的value的,以评价策略好坏。如果要引入deterministic的策略,就得到了最后的DPG算法。
QAC
先来介绍最简单的AC算法,以此学习AC算法核心思想。回顾我们的SGD下的PG算法:
因为参数在变化,所以这个算法就是在更新策略,那么这个算法其实就是actor。那么critic是啥呢?显然就是对的估计。我们之前提过用MC估计q值,如果用TD方法估计的话,这个算法就一般被称为AC。QAC算法如下:
我们得到实际就是一个experience
sample,就可以用他们去估计action
value;这就是我们先前讲过的结合了值函数近似的sarsa算法,也就是AC里的 ...
Tensorflow版本问题汇总
纯折磨,不评价,如果在大点的项目硬是要在tf2用tf1我只能说祝你好运,哥们已经麻了。(tf和py版本也是有关的,详见:在
Windows 环境中从源代码构建 | TensorFlow (google.cn))
各种has no attribute
使用这个:
1import tensorflow.compat.v1 as tf
cannot
import name ‘dtensor‘ from ‘tensorflow.compat.v2.experimental
tensorflow与Keras版本不匹配,把keras降成TensorFlow一样的版本,比如tf2.6.0的话,就pip
install keras==2.6.0.
RuntimeError:
tf.placeholder() is not compatible with eager execution
RuntimeError:
tf.placeholder() is not compatible with eager
execution.(亲测有效)_调皮李小怪的博客-CSDN博 ...
ml-agents 踩坑汇总
ml-agents是一个应用于unity的MARL环境,但是用起来怪怪的,emm
以此贴记录踩坑汇总。
首先我想说一下这些环境安装起来太离谱了,各种包之间依赖关系非常混乱,版本问题也是让人头皮发麻,比如numpy在1.24后就没有np.float等等东西了,比如TensorFlow的1.x和2.x带来的巨多问题。。
Unable
to convert function return value to a Python type!
报错信息为:
但其实如果你往上自己看的话,他会先报一个numpy的错误。其实这个问题就是numpy和TensorFlow不兼容导致的,我也是搜外网才搜到的!!找了几个英语的和日语的,给出的解决方案是:
至于numpy和TensorFlow的对应兼容关系我找不到合理的,给大家提供一下我的作为参考吧:numpy1.21.6
; TensorFlow2.6.0
再运行终于成功了:
真不容易啊,在TensorFlow手上不知道吃多少亏了,真的麻了。之前搞个MARL环境,忘了叫啥,因为原论文搞得1.x的版本还是啥,直接给我搞崩溃了(2 ...
强化学习(九):策略梯度方法
策略梯度方法和下一节的AC方法是现在越来越流行的方法。之前所有的方法都是value-based,现在开始的方法都是policy-based的。而基于策略的方法呢,是直接建立一个策略相关的目标函数(从value
function 到 policy
function),直接优化这个函数就会得到最优策略。而AC方法则是结合了基于策略和基于值的方法。
基本思想
目前为止,我们所有的策略都是表格表示的,如图所示:
下面我们把表格改成函数,关于策略的写法也会改变: 或或 这个是一个向量,表示π这个函数里面的参数。现在用的最广泛的函数形式便是神经网络,输入s后,经过参数(策略函数是,值函数是w),得到一组对应不同action的π。优点与之前讲值函数是一样的。
用表格表示的时候,我们说策略π是最优的,如果它能让每个状态价值最大;那如果用函数表示,该怎么定义最优策略?我们定义如果π最优,那么它就最大化了一个scalar
metric,这个metric也在这里称为我们的目标函数。我们定义目标函数为。那么我们希望的即为。最简单的优化算法就是:
别忘了我们是最 ...
强化学习(八):值函数近似与DQN
之前我们介绍的是基于表格的方式,现在我们要介绍基于函数的方式。现在开始,我们要引入神经网络。此外,现在讲的都是基于值的,下次将介绍基于策略的。
虽然我们没有明说,但我们目前为止确实是以表格方式存储数据的,比如:
显然当state
space连续或者巨大无比的时候,这种方式就不能用了;同时泛化能力也不能得到保证。引入函数近似的话,这些问题就可以解决了。假如我们有好多好多状态s,每个都对应一个v,那能不能用一条曲线来拟合v-s关系呢?
最简单的就是直线,可以写成: 当然了不用想都知道这是不准确的。我们也可以用高阶曲线去近似:
或者用神经网络去模拟。模拟的好处是,可以用比state
space的大小更少的参数去存储,并且具有很好的泛化性(就是如果改变一些state
value,可能相邻的state
value也会改变,而不需要访问所有的state)。下面是正式的介绍。
state value estimation
这节都讲的是重要的方法。
objective function
我们的目的是找到最优的去让我们的去最好的近似我们 ...
强化学习(七):时序差分算法
这一章我们介绍Temporal-difference
learning(TD-learning),以及包含其中的Sarsa和Q-learning。我们先考虑下述表达式:
这是对上一章的一个更复杂的例子。R和X都是随机变量,v是一个函数,是一个常数。那我们也可以定义出个g(w):
并且根据采样的r和x,得出对应的观测的: 于是,我们就可以和RM算法联系起来,得到求解g(w)=0的迭代公式:
这个表达式就和我们待会看TD算法的时候看到的表达式非常像了。这个R就对应的reward,就是衰减因子,v就是state
value。
TD算法介绍
先看如何用TD算法求解给定策略π后的state value,也就是policy
evaluation。TD算法是一大类算法(包括sarsa,q-learning),也指用来估计state
value的特定算法,也就是我们现在要介绍的。
TD算法基于数据(experience)来强化学习,这些数据是根据策略π得到的,它们可以写作:或者。那么我们期待已久的TD算法就长这样:
我们注意,智能 ...
强化学习(六):随机近似与随机梯度下降
在此后的学习都是model-free的。为了之后Temporal-difference
learning(时间差分学习),需要先介绍本章知识。
上一节我们说过强化学习的一个核心词叫expectation,我们要去做mean
estimation,这也是蒙特卡洛的核心思想:我们用足够多的样本的均值去近似expectation。如何计算均值?如果要一次性计算,就需要等到所有数据收集后再算;另一种方法是增量地去计算,就是用一种递推的思想。我们令:
那么有: 因此我们得到了一个递推的公式: 如果把这里的1/k换成 ,
如果其满足一些条件,那么结果同样收敛到E(X)。这个估计均值的算法就是一种特殊的SA(stochastic
approximation)算法,也是一个特别的SGD(随机梯度下降)算法。
Robbins-Monro algorithm
这是SA中一个经典算法。SA代表了一大类算法,即stochastic iterative
algorithm,用于方程求解或者优化。它的特点是不需要知道方程的表达式从而求解。Robbins-Monro算 ...