我正在使用公式为这个非常简单的线性网络(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
观察到的数值不稳定性的来源是什么以及如何处理它们,以便测试可以一直通过。仅仅是对操作进行不同排序的问题吗?