基于ConvNet的Forward Forward算法不同形状张量求和问题求助
问题描述
我正在开展基于ConvNet的Forward Forward算法相关研究。在执行预测时,需要对各层的goodness score求和,但卷积操作导致各score张量维度不同,运行代码中goodness_score_per_label += [sum(goodness).unsqueeze(1)]行时出现报错。
代码示例
def predict(self, x): goodness_score_per_label = [] for label in range(self.output_dim): # perform one hot encoding# print('label:', label, x.shape) encoded = overlay_y_on_x(x, label) goodness = [] for idx, layer in enumerate(self.layers): encoded = layer(encoded) print('encoded:', encoded.shape) goodness += [encoded.pow(2).mean(1)] print('goodness:', len(goodness), goodness[idx].shape) goodness_score_per_label += [sum(goodness).unsqueeze(1)] goodness_score_per_label = torch.cat(goodness_score_per_label, 1) return goodness_score_per_label.argmax(1)
张量维度信息
encoded: torch.Size([50000, 6, 14, 14]) goodness: 1 torch.Size([50000, 14, 14]) encoded: torch.Size([50000, 16, 7, 7]) goodness: 2 torch.Size([50000, 7, 7]) encoded: torch.Size([50000, 120, 3, 3])
最优解决方法
问题核心是各层的goodness张量保留了卷积后的空间维度(如14x14、7x7),维度不匹配无法直接求和。需先将每个层的goodness压缩为单维度的batch级分数,再进行求和操作,以下是两种常用方案:
方案1:全局平均池化(推荐,贴合原论文思路)
对每个层的goodness在空间维度上做全局平均,将[batch_size, H, W]转为[batch_size],统一维度后即可相加。修改代码中计算goodness的逻辑:
# 替换原goodness += [encoded.pow(2).mean(1)] goodness += [encoded.pow(2).mean(dim=[1,2,3])]
解释:encoded.pow(2).mean(dim=[1,2,3])直接对通道、高度、宽度维度求平均,一步得到每个样本的单值goodness score,维度为[50000],各层结果维度一致,后续sum(goodness)可正常执行。
方案2:全局求和池化
若更关注激活值的总能量而非平均,可将平均改为求和:
goodness += [encoded.pow(2).sum(dim=[1,2,3])]
该方式保留激活值的总量级,适合对能量敏感的场景。
修改后的完整predict函数
def predict(self, x): goodness_score_per_label = [] for label in range(self.output_dim): encoded = overlay_y_on_x(x, label) goodness = [] for layer in self.layers: encoded = layer(encoded) # 全局平均计算单样本goodness score = encoded.pow(2).mean(dim=[1,2,3]) goodness.append(score) # 各层分数求和后增加维度,方便后续拼接 total_goodness = sum(goodness).unsqueeze(1) goodness_score_per_label.append(total_goodness) goodness_score_per_label = torch.cat(goodness_score_per_label, 1) return goodness_score_per_label.argmax(1)
内容的提问来源于stack exchange,提问作者Azucode
相关产品推荐
相关产品推荐

