问题描述:
将ResNet18修改为ResNet101时报告以下错误
RuntimeError: Function AddmmBackward returned an invalid gradient at index 1 -got [64, 4096] but expected shape compatible with [64,17408]
原因:
看了网上的帖子,主要有两方面的原因。
1.由于反向传播时的device不一致问题。训练过程中,前向传播时我们需要模型、输入位于同一设备上(都在cuda或都在cpu),如果这时出了问题能够清晰的找到报错信息,一个类型是Tensor,一个是CUDATensor。
2.网络结构问题。需要检查前一个网络的输出与后一个网络的输入形状是否一致。
我的解决方案:
修改了网络全连接层,将原本ResNet18全连接层维度4096修改为ResNet101全连接层维度17408。