为啥在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性?

     2023-03-28     23

关键词:

【中文标题】为啥在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性?【英文标题】:Why Inception V3 retrained using tensorflow and keras on same dataset shows different accuracy?为什么在同一数据集上使用 tensorflow 和 keras 重新训练的 Inception V3 显示出不同的准确性? 【发布时间】:2019-09-11 18:25:28 【问题描述】:

我正在尝试重新训练在 ImageNet 数据集上预训练的 Inception V3。

************ Keras(使用 TensorFlow 后端)************

我用以下代码重新训练了 Inception V3 使用 Keras(tensorflow 后端):

# SETUP MODEL
CLASSES = 3
base_model = InceptionV3(weights='imagenet', include_top=False)
x=base_model.output
x=GlobalAveragePooling2D()(x)
preds=Dense(CLASSES,activation='softmax')(x) #final layer with softmax activation

model=Model(inputs=base_model.input,outputs=preds)

# transfer learning
for layer in base_model.layers:
    layer.trainable = False

model.compile(loss="categorical_crossentropy", optimizer='adam',metrics=["accuracy"])

# train the network
print("[INFO] training network...")
H = model.fit_generator(
    aug.flow(trainX, trainY, batch_size=BS),
    validation_data=(testX, testY),
    steps_per_epoch=len(trainX) // BS,
    epochs=EPOCHS, verbose=1, callbacks=[csv_logger])

经过 100 个 epoch 的训练后,我的准确率在 85% 到 90% 之间,如图所示:Training result using Keras plor

******** TensorFlow **********

我还通过以下链接使用 Tensorflow 在 ImageNet 上重新训练了 Inception V3 预训练:How to Retrain an Image Classifier for New Categories。 经过 4000 次迭代后,我的准确率在 93% 到 96% 之间,如下图所示:Training result using Tensorflow

谁能帮我找到这个原因的解释,或者请指出错误(如果有的话),供我解释。

实际上我在使用 Keras:

较低的学习率 = 0.001 epochs = 100 和 Batch size = 32 使用

进行数据增强
aug = ImageDataGenerator(rotation_range=25, width_shift_range=0.1,
    height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
    horizontal_flip=True, fill_mode="nearest")

另一方面:

在张量流中,我正在使用

更高的学习率 = 0.01

增强技术。

但是看起来,张量流模型达到了更高的准确度。 如果有人知道 tensorflow How to Retrain an Image Classifier for New Categories 使用的任何技巧或这种差异的任何可能的逻辑原因,请帮助我理解。

【问题讨论】:

看起来你运行 Tensorflow 的时间更长了。您不希望这会给您带来更高的准确性吗? @Chris 感谢您的回复......我也已经在 keras 中运行了 1000 个 epoch,但它只是过度拟合,准确性并没有提高。顺便说一句,有什么方法可以比较一般的迭代和时期? 【参考方案1】:

您可能会看到差异的原因有很多。我认为更重要的部分是研究您在此旅程中可能想学习的一些东西。

首先,您应该每 x 个时期检查一次准确性。如果说之后准确性没有提高,则需要 3 个 epoch 才能结束训练。

您需要在每个类别中包含偶数数量的图像,否则您的批次中会出现一个类别过多。

您可能希望在管道中加入一些增强技术,以防止过度拟合。这包括在将图像送入批处理时对一定百分比的图像进行旋转、裁剪、模糊、噪点等。这也可以帮助解决每个类没有足够图像的问题。

您可能也没有选择最佳学习率,这很重要。

我建议查看有关图像分类的 fast.ai 部分,并通过 tensorflow 切换到 fastai 库。

【讨论】:

感谢您的详细解释。 我明白需要考虑的因素有很多。但在 Keras 中,我使用较低的学习率和数据增强技术。另一方面,在 tensorflow 中,我没有使用任何数据增强技术。但仍然 tensorflow 模型实现了更高的精度。在这两种情况下,我都使用在 ImageNet 上预训练的相同模型(Inception V3),并且只为新类添加了一个 FCL 和 softmax 层。

Keras:使用批量标准化在同一数据集上的不同训练和验证结果

】Keras:使用批量标准化在同一数据集上的不同训练和验证结果【英文标题】:Keras:Differenttrainingandvalidationresultsonsamedatasetusingbatchnormalization【发布时间】:2017-11-1806:29:56【问题描述】:即使我使用相同的数据集,我的训练分类也... 查看详情

在自己的数据集上训练 TensorFlow 对象检测

】在自己的数据集上训练TensorFlow对象检测【英文标题】:TrainTensorflowObjectDetectiononowndataset【发布时间】:2017-12-1121:27:26【问题描述】:在花了几天时间尝试完成这项任务后,我想分享一下我如何回答这个问题的经验:如何使用TS... 查看详情

在 MNIST 集上使用 TensorFlow 进行预测的困境

】在MNIST集上使用TensorFlow进行预测的困境【英文标题】:DillemawithpredictionwithTensorFlowonMNISTset【发布时间】:2017-10-1014:03:54【问题描述】:目前我是TensorFlow的新手,我已经使用MNIST集训练了一个模型,现在我制作了一些带有数字的... 查看详情

TensorFlow:神经网络在训练集和测试集上的准确率始终为 100%

】TensorFlow:神经网络在训练集和测试集上的准确率始终为100%【英文标题】:TensorFlow:NeuralNetworkaccuracyalways100%ontrainandtestsets【发布时间】:2018-02-2114:09:53【问题描述】:我创建了一个TensorFlow神经网络,它有2个隐藏层,每个隐藏... 查看详情

Tensorflow:在具有不同类别数量的新数据集上微调预训练模型

】Tensorflow:在具有不同类别数量的新数据集上微调预训练模型【英文标题】:Tensorflow:Finetunepretrainedmodelonnewdatasetwithdifferentnumberofclasses【发布时间】:2017-06-0415:24:17【问题描述】:如何在新数据集上微调TensorFlow中的预训练模型... 查看详情

保存的随机森林模型在同一数据集上产生不同的结果

】保存的随机森林模型在同一数据集上产生不同的结果【英文标题】:SavedRandomForestmodelproducesdifferentresultsonthesamedataset【发布时间】:2020-11-2806:09:41【问题描述】:我在使用保存在磁盘上的随机森林模型并使用完全相同的数据集... 查看详情

每次我在同一个数据集上训练模型时,分类精度都不同

】每次我在同一个数据集上训练模型时,分类精度都不同【英文标题】:DifferentclassificationaccuracyeverytimeItrainmodelsonthesamedataset【发布时间】:2019-09-1012:40:03【问题描述】:我正在使用相同的特征提取器在同一数据集上训练三个不... 查看详情

为啥 LinearSVC 在这个数据集上效果这么差?

】为啥LinearSVC在这个数据集上效果这么差?【英文标题】:WhyLinearSVCworkssobadonthisdataset?为什么LinearSVC在这个数据集上效果这么差?【发布时间】:2019-09-1812:25:39【问题描述】:我刚刚生成了一个数据集,从散点图中我认为这些散... 查看详情

r语言coin包应用于独立性问题的置换检验(permutationtests)在同一数据集上使用单向方差分析(one-wayanova)和近似的k样本置换检验比较多个分组的均值是否相同

R语言使用coin包应用于连续变量独立性问题的置换检验(permutationtests)、在同一数据集上使用单向方差分析(one-wayANOVA)和近似的K样本置换检验(ApproximativeK-SamplePermutationTest)、比较多个分组的均值是否相同目录 查看详情

tensorflow为啥用训练好的数据出来的概率不变

基本使用使用TensorFlow,你必须明白TensorFlow:使用图(graph)来表示计算任务.在被称之为会话(Session)的上下文(context)中执行图.使用tensor表示数据.通过变量(Variable)维护状态.使用feed和fetch可以为任意的操作(arbitraryoperation)赋值或者从其中... 查看详情

我可以在整个数据集上使用 StandardScaler(),还是应该分别在训练集和测试集上计算?

】我可以在整个数据集上使用StandardScaler(),还是应该分别在训练集和测试集上计算?【英文标题】:CanIuseStandardScaler()onwholedataset,orshouldIcalculateontrainandtestsetsseparately?【发布时间】:2021-06-0323:33:49【问题描述】:我正在为大约100... 查看详情

使用opencvkeras和tensorflow进行微笑检测(代码片段)

使用OpenCV、Keras和TensorFlow进行微笑检测这篇博客将介绍如何构建一个完整的端到端应用程序,可以使用深度学习和传统的计算机视觉技术实时检测视频流中的微笑。首先在包含微笑和不微笑的人脸的SMILES图像数据集上训练LetNet架... 查看详情

为啥在同一数据上表达 line 和 graph_objects 散点图不同的日期?

】为啥在同一数据上表达line和graph_objects散点图不同的日期?【英文标题】:Whyexpresslineandgraph_objectsscatterplotdifferentdatesonthesamedata?为什么在同一数据上表达line和graph_objects散点图不同的日期?【发布时间】:2022-01-2318:53:28【问题... 查看详情

为啥每次我在这个特定数据集上运行 train-test split 时我的内核都会死掉?

】为啥每次我在这个特定数据集上运行train-testsplit时我的内核都会死掉?【英文标题】:WhydoesmykerneldieeverytimeIruntrain-testsplitonthisparticulardataset?为什么每次我在这个特定数据集上运行train-testsplit时我的内核都会死掉?【发布时间... 查看详情

在 Tensorflow 中使用 InceptionV3 进行预测

】在Tensorflow中使用InceptionV3进行预测【英文标题】:PredictionusingInceptionV3inTensorflow【发布时间】:2017-07-1618:37:57【问题描述】:我在自己的数据集上训练了张量流中的InceptionV3模型。我有来自培训的检查点文件和图表(.meta)。我... 查看详情

如何使用tensorflowhub和代码示例(代码片段)

...受的数据集上训练的权重,即与训练模型。   TensorFlow现在已经提出了一个更好的框架,称为TensorFlowHub,它非常易于使用且组织良好。使用TensorFlowHub,您可以通过几行代码导入大型和流行的模型,自信地执行广泛使用... 查看详情

r语言使用lmperm包应用于线性模型的置换方法(置换检验permutationtests)在同一数据集上使用双因素方差分析(one-wayancova)aovp函数的置换检验双因素方差分析

R语言使用lmPerm包应用于线性模型的置换方法(置换检验、permutationtests)、在同一数据集上使用双因素方差分析(one-wayANCOVA)、使用aovp函数的置换检验双因素方差分析(Permutationtestfortwo-wayANOVA)目录 查看详情

Tensorflow:DecodeJpeg 方法在桌面和移动设备上为同一图像提供不同的像素值

】Tensorflow:DecodeJpeg方法在桌面和移动设备上为同一图像提供不同的像素值【英文标题】:Tensorflow:DecodeJpegmethodgivesdifferentpixelvaluesondesktopandmobileforthesameimage【发布时间】:2018-09-1919:03:28【问题描述】:我在训练模型时使用Tensorflo... 查看详情