手动计算的梯度和PyTorch链规则之间的数值差异

时间:2019-03-22 12:16:28

标签: python deep-learning pytorch backpropagation

我正在使用公式为这个非常简单的线性网络(MSE损失)使用公式手动计算梯度。

然后我与PyTorch计算的梯度进行比较,并使用PyTorch中的 @Repository public interface RoomRepository extends CRUDRepository<Room, Long>{ private final String QUERY_STRING = " select r from room r join booking b on r.id = b.id where b.date_time = :date and b.length = :len "; @Query(QUERY_STRING) Room getRooms(LocalDateTime date, Integer len); } 函数检查PyTorch是否正确计算了梯度(即,手动计算的梯度和pytorch之间的相对差异足够小)。
公式正确无误,所有测试均应通过。但是对于某些种子却没有。

因此,显然PyTorch并没有做错任何事情,但是由于公式正确,它必须来自公式中的一些数字不稳定性问题。

allclose

观察到的数值不稳定性的来源是什么以及如何处理它们,以便测试可以一直通过。仅仅是对操作进行不同排序的问题吗?

0 个答案:

没有答案