输入自定义目录
- 要解决的问题
- 出现问题的原因
passion!!!
要解决的问题
报错信息:RuntimeError: The size of tensor a (1280) must match the size of tensor b (4) at non-singleton dimension 1 。什么是non-singleton dimension 1
.
出现问题的原因
出现此问题的原因,是两个tensor a 和 b的shape不匹配,当然这个不匹配不是简单的不相同,因为我们知道,python是有自动广播机制的,比如,对于加法操作,如果张量a的shape是[3, 1280, 8,8] ,b的shape是[1, 1280, 8, 8], 那么在python中这两个张量是可以通过广播机制实现相加的,也就是b会被自动广播为shape为[3, 1280, 8, 8]。
了解了python里的广播机制后,那我们再来看出现这个报错的原因。这说明 tensor a 和 tensor b不满足广播机制,因此无法计算。 那么广播机制到底是什么呢?
其实很简单,就是广播会自动对维度数不一致且维度数是1也就是所谓的singleton dimension 1
维度进行广播,从而实现计算。举个例子, [1, 1280, 8, 8] 和[3, 1280, 8, 8] 可以通过广播进行计算对吧,但 [1, 1280, 8, 8] 和 [1, 4, 8, 8] 是无法通过广播实现相加的
,这也正是此处报错的原因。 因为这两个shape 的维度不同处在dim=1处,而这两个张量在dim=1处的维度数都不为1,因此无法实现广播。