问题描述
Traceback (most recent call last):
File "/home/visionx/nickle/temp/SimCLR/linear_evaluation.py", line 233, in <module>
plt.scatter(t_sne_embeddings[node_labels == class_id, 0],
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IndexError: boolean index did not match indexed array along dimension 0; dimension is 128 but corresponding boolean dimension is 49920
原因分析和解决
这个原因到是很好分析:就是索引对不上,indexError嘛,那为什么索引对不上呢?
我们看一下报错信息就知道了,这个错误是和node_labels密切相关的,这个看名字大概能猜出来是对某个内容的标签,其实就是所取数据,那既然是取数据,总有一定的数量对吧,按照cv习惯的处理方法,其实就是分batch进行操作,那结果是什么对不上了呢?我们就得分析整个过程是怎么样的。
我们再进行模型加载,或者预训练模型加载的时候是把批量的特征存储进来的,批量是多少?128,那就和报错信息内容对应上了,那为什么还有一个49920呢?这个时候我们留个心眼除一下就知道了,正好的390,也就是说按照128每batch去取,取了390次正好可以训练一个轮次,在验证的时候是把一个轮次epoch而不是一个批次batch,那明白了这一点就好处理了。<

本文讲述了在处理SimCLR模型时遇到的IndexError,原因在于批量处理数据时,标签数量与批量大小不匹配。通过分析和调整代码,将数据放入batch中解决了问题,强调了调试在解决此类问题中的重要性。
622

被折叠的 条评论
为什么被折叠?



