假设我有一堆定义如下的摘要:
loss = ...
tf.scalar_summary("loss", loss)
# ...
summaries = tf.merge_all_summaries()
Run Code Online (Sandbox Code Playgroud)
我可以summaries在训练数据的每几步评估张量,并将结果传递给a SummaryWriter.结果将是嘈杂的摘要,因为它们仅在一个批次上计算.
但是,我想计算整个验证数据集的摘要.当然,我无法将验证数据集作为单个批次传递,因为它太大了.因此,我将获得每个验证批次的摘要输出.
有没有办法对这些摘要进行平均,以便看起来好像是在整个验证集上计算了摘要?
我正在为Android平台开发Cordova插件.
如上所述这里,我编辑的platforms/android/res/xml/config.xml文件,包括插件的类映射.
这一切都很好,除了每次我运行cordova prepare android这个文件得到覆盖说:
Generating config.xml from defaults for platform "android"
Run Code Online (Sandbox Code Playgroud)
所以,我必须每次都撤消这个非常烦人的变化.有没有办法告诉cordova不要这样做或在其他地方插入类映射?
我意识到每次训练时我的模型最终会变得不同,即使我保持TensorFlow随机种子相同.
我证实了这一点:
tf.gradients(loss, train_variables).虽然loss并且train_variables具有相同的值,但是对于一些变量,梯度有时是不同的.差异非常显着(有时单个变量的梯度的绝对差值之和大于1).我得出结论,这是导致非确定性的梯度计算.我看了一下这个问题,当用intra_op_parallelism_thread=1和运行CPU时问题仍然存在inter_op_parallelism_thread=1.
当前向传球不是时,后向传球如何是不确定的?我怎么能进一步调试呢?
我正在尝试在我的模型中使用批量重整化,这是tf.keras.layers.BatchNormalization通过renorm_clipping参数实现的:
一个字典,可以将键 'rmax'、'rmin'、'dmax' 映射到用于剪辑 renorm 校正的标量张量。校正 (r,d) 用作 Corrected_value = normalized_value * r + d,其中 r 剪裁为 [rmin, rmax],而 d 剪裁为 [-dmax, dmax]。缺失的rmax、rmin、dmax分别设置为inf、0、inf。
然而,这个最小的代码示例在 Tensorflow 2.3.1 中失败了:
# The actual input we care about
inputs = tf.keras.Input([1])
# The current global step
step = tf.keras.Input([1])
# Compute renorm parameters from global step
rmax = 1 + step / 1000
rmin = 1 / rmax
dmax = step / 1000
# Instantiate batch norm layer …Run Code Online (Sandbox Code Playgroud)