由于我使用3D医学图像作为训练数据集,由于GPU的限制,批次大小只能设置为1。有人告诉我,当batch_size = 1时std dev将为0。(x-mean)/ std_dev将因除以0而导致错误。
但是,当我设置batch_size = 1时为什么没有发生错误?为什么我的网络受到了预期的良好培训?有人可以解释吗?
Some people认为:
由于两种情况,可能不会遇到
<script type="text/javascript"> function checkValues(sender, args) { var radGrid = $find('<%=RadGrid1.ClientID %>'); var masterTable = radGrid.get_masterTableView(); var row = sender._element.getAttribute("rowindex"); if (row != 0) { for (var i = 0; i < row; i++) { if (masterTable.get_dataItems()[i].findControl("value").get_value() < args.get_newValue()) { sender.set_value(" "); sender.focus(); } } } } </script>
。首先,将异常捕获在ZeroDivisionError
catch块中。其次,向方差项添加一个小的有理数(try
),以使其永远不会为零。
但是some people不同意。他们说:
您应该计算批次图像中所有像素的均值和标准差。 (因此,即使
1e-19
仍然有很多像素。因此batch_size = 1
仍然可以工作的原因并不是因为batch_size=1
)
我检查了pytorch源代码,从代码中我认为后者是正确的。
有人有不同的看法吗?