Python 尽管该模型非常成功,但稀疏分类交叉熵损失的比例似乎非常高
我正在使用Tensorflow培训一些CNN的专有数据网络。我们有大量的数据,而且这些模型似乎能够学习大量关于数据分类的信息(到目前为止都是二进制分类) 有时,列车/测试精度曲线可能非常好,在某些情况下可达95%以上。然而,损失函数在规模上是可疑的。从视觉上看,它们看起来很好,我希望它能表现得很好,但这不是正确的数量级 有谁能告诉我,在TF/KERA中,这种缩放通常是如何适当地进行的?我对这些模型很有信心,因为它们已经在其他数据集上进行了测试,并得到了很好的推广,但扭曲的损失函数并不好报告 学习率约为0.0001Python 尽管该模型非常成功,但稀疏分类交叉熵损失的比例似乎非常高,python,tensorflow,machine-learning,keras,Python,Tensorflow,Machine Learning,Keras,我正在使用Tensorflow培训一些CNN的专有数据网络。我们有大量的数据,而且这些模型似乎能够学习大量关于数据分类的信息(到目前为止都是二进制分类) 有时,列车/测试精度曲线可能非常好,在某些情况下可达95%以上。然而,损失函数在规模上是可疑的。从视觉上看,它们看起来很好,我希望它能表现得很好,但这不是正确的数量级 有谁能告诉我,在TF/KERA中,这种缩放通常是如何适当地进行的?我对这些模型很有信心,因为它们已经在其他数据集上进行了测试,并得到了很好的推广,但扭曲的损失函数并不好报告 学习
L1
和L2
使用相同的lambda值,在为模型提供介于0.01和0.03之间的值时,我最成功地使用了该值。我现在没有退学
我包括了一个特别高精度跑步的照片。情况并非总是如此,但有时确实会发生。我怀疑这个问题部分是由于异常数据,或者可能是正则化值
下面是相关的代码片段
model = tf.keras.models.Sequential()
if logistic_regression is not True:
for i in range(depth):
# 1
model.add(Conv2D(
15,
kernel_size=(10, 3),
strides=1,
padding='same',
activation='relu',
data_format='channels_last',
kernel_regularizer=tf.keras.regularizers.l1_l2(
l1=regularizer_param,
l2=regularizer_param)
))
model.add(MaxPooling2D(
pool_size=(3, 3),
strides=1,
padding='valid',
data_format='channels_last'))
model.add(BatchNormalization())
if dropout is not None:
model.add(Dropout(dropout))
# flatten
model.add(Flatten(data_format='channels_last'))
model.add(Dense(
len(self.groups),
# use_bias=True if initial_bias is not None else False,
# bias_initializer=initial_bias
# if initial_bias is not None
# else None,
kernel_regularizer=tf.keras.regularizers.l1_l2(
l1=regularizer_param,
l2=regularizer_param)
))
您不应该担心损失函数值的规模。请记住,损失函数只是衡量网络的距离。但是,您可以随时按自己喜欢的方式进行缩放。重要的是各个时代的损失趋势?您希望它是一个平滑的减少,这是您的第二个图所示 损失只是:对于同一网络,对于同一数据集,一个仅在相对意义上有意义的任意数字。它没有其他意义。事实上,损失也与指标不符:见Huang等人,2019年 由于它们已经在其他数据集上进行了测试,并且得到了很好的推广 这才是重要的 但是扭曲的损失函数并不好报道 你可以将这些损失扩大1000倍。它们只有在相对意义上才有意义 参考文献:
model.compile(
optimizer=tf.keras.optimizers.Adagrad(
learning_rate=learning_rate,
initial_accumulator_value=0.1,
epsilon=1e-07,
name='Adagrad'),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])