在优化器,学习率等都一样的情况下,模型到达一定的深度时,fit正常使用,而自定义学习loss完全不变,一点都不学习。在模型比较小的时候就挺正常的。这是为什么呢? fit有什么隐藏的自动调节手段吗
看了下代码,model.fit()是默认使用batch_size=32的小批量学习,而tf.GradientTape是默认使用所有训练集进行训练。而且model.fit()在每次迭代时会对数据进行打乱(shuffle)。batch_size代码你可以根据下面的源码稍微改一下:
for x_batch, y_batch in tf.data.Dataset.from_tensor_slices((X, y_true)).batch(32):
with tf.GradientTape() as tape:
y = model(x_batch, training=True)
loss_value = loss_fun(y_batch, y)
grads = tape.gradient(loss_value, model.trainable_variables)
opt_g.apply_gradients(zip(grads, model.trainable_variables))
检测
楼主这问题是不是图像相关的?有可能楼主输入的初始图像尺度分辨率有点小,比如(3,32,32)的图像大小,可以将其转换为(3,224,224)的大小。
也有可能是过深,中间收敛散了,建议每层加上dropout和BN层,这样更容易收敛
描述还是不太详细
我遇到的loss完全不变都是loss写错了的,至少也会有微小变动吧..