Tensorflow 什么';我的ResNet50在两台机器上有什么问题?

Tensorflow 什么';我的ResNet50在两台机器上有什么问题?,tensorflow,keras,deep-learning,computer-vision,resnet,Tensorflow,Keras,Deep Learning,Computer Vision,Resnet,首先,我在Kaggle上从头训练了一个ResNet50,使其成为一个六类分类器,结果是这样的。 如您所见,训练集和验证集的准确性稳步提高。 在那之后,我在互联网上租了一台云主机以获得更好的GPU(1080ti),并复制了我的代码(我上传了我的Jupyter笔记本)。然后我跑了。但奇怪的事情发生了。我的验证精度非常不稳定,并且总是波动很大(约为0.3)。这是截图 而且,在主机上的训练要比在Kaggle内核上的训练困难得多。 以下是几段时间后的截图。(实际上,主持人的一段时间比卡格尔的一段时间长

首先,我在Kaggle上从头训练了一个ResNet50,使其成为一个六类分类器,结果是这样的。

如您所见,训练集和验证集的准确性稳步提高。 在那之后,我在互联网上租了一台云主机以获得更好的GPU(1080ti),并复制了我的代码(我上传了我的Jupyter笔记本)。然后我跑了。但奇怪的事情发生了。我的验证精度非常不稳定,并且总是波动很大(约为0.3)。这是截图

而且,在主机上的训练要比在Kaggle内核上的训练困难得多。 以下是几段时间后的截图。(实际上,主持人的一段时间比卡格尔的一段时间长得多) 这是我的ImageDataGenerator代码

train_datagen=ImageDataGenerator(
重新缩放=1./255,
剪切范围=0.1,
缩放范围=0.1,
宽度\偏移\范围=0.1,
高度位移范围=0.1,
水平翻转=真,
垂直翻转=真,
验证_分割=0.1
)
test_datagen=ImageDataGenerator(
重新缩放=1./255,
验证_分割=0.1
)
train_generator=来自目录的train_datagen.flow_(
基本路径,
目标_大小=(300300),
批次尺寸=16,
class_mode='classifical',
"训练",,
种子=0
)
验证\u生成器=来自\u目录的测试\u datagen.flow\u(
基本路径,
目标_大小=(300300),
批次尺寸=16,
class_mode='classifical',
子集='验证',
种子=0
)

您是单独提供验证集还是只指定验证分割大小?我只指定验证分割大小。我编辑了我的问题,发布了我的数据生成器代码@BashirKazimiYou正在使用生成器创建具有不同增强功能的数据,这将很难得到可重复的结果。我认为这就是结果变化的原因。如果您想要可复制的结果,我建议您使用生成器来创建数据并首先将其保存到磁盘。然后,您可以加载数据(直接加载或使用生成器加载,但不增加),并训练您的模型。通过这种方式,您可以确定每次都在相同的示例集上进行训练,并且可能会得到类似的结果。您的意思是主机将数据大小与Kaggle内核进行不同的分割?它对性能有这么大的影响吗?事实上,在Kaggle上,我跑了60个纪元,准确度超过了0.7。但在主机上,我运行了大约120个纪元,仍然获得了较低且波动(0.4~0.6)的准确度。(顺便说一句,我已经在卡格尔和主持人身上运行过很多次了。卡格尔总是表现得很好,而主持人总是表现得很差)@BashirKazimi