问题标签 [transfer-learning]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
keras - 数据增强会损害准确性 Keras
我正在尝试将深度学习与 Python 第 5.3 节特征提取与数据增强适应于 resnet50(imagenet 权重)的 3 类问题。
完整代码在https://github.com/morenoh149/plantdisease
问题:
- 这本书没有过多介绍 ImageDataGenerator 和选择
steps_per_epoch
andvalidation_steps
。这些值应该是什么?我有 3 个班级,每个班级 1000 张图片。我已将其拆分为 60/20/20 训练/验证/测试。 - 在没有数据增强的情况下,我能够获得 60% 的验证准确度。上面我已将 ImageDataGenerator 简化为仅重新缩放。这个模型的验证准确率为 30% 为什么?
- 我需要对此脚本的数据增强版本进行哪些更改以匹配不增强的准确性?
更新:这可能是 keras 本身的问题
python-3.x - 在预训练模型前添加 Conv 层会产生 ValueError
我想将一个预训练的 VGG16 模型与一个特殊的输入块相结合,它是一个输入层和一个卷积层。目标是在灰度图像上使用预训练的 RGB VGG16 imagenet 模型:
当我将权重初始化设置为VGG16()
to'None'
时,模型会正确构建,并具有以下所需结构:
但是,当我将权重初始化设置为 时'imagenet'
,出现以下错误:
ValueError:您正在尝试将包含 13 层的权重文件加载到具有 14 层的模型中。
这个错误是有道理的,因为我在 VGG16 模型前面添加了两层而不是单层。
作为一种解决方法,我尝试了以下方法:
那么,模型结构为:
这种结构的缺点是我无法在 VGG16 模型中设置层的属性。例如,我想冻结此模型中的某些层,我无法通过combined_model.layers
. 有没有人有一个可行的解决方案,这样我就可以像'None'
初始化一样获得模型结构,但使用预训练的 ImageNet 权重?
python - 从非最终 keras 模型层获取输出
我在 tensorflow 上使用带有 python 3 和 keras 的 ubuntu,我正在尝试使用来自预训练的 keras 模型的迁移学习来创建一个模型,如下所述:
我正在使用以下代码
我正在使用的层的输出始终是一个零数组,我是否应该将权重加载到我正在创建的 p 以使预训练模型实际工作?
python - ResNet50 迁移学习失败
我需要一个或多个提示来克服迁移学习的第一个痛苦。
以下代码是我实际尝试做的精简版本,但即使是我在那里使用的假图像(A:空 / B:空 + 小方块),它也显示了问题。在最终版本中,输入将是更复杂的图像(这证明了应用基础模型的复杂性)。
问题看起来很简单。输入:两种类型的图像,输出:二元分类(“square present yes/no”)。修改后的 ResNet50 模型通过ImageDataGenerator
. 由于我可以创建任意数量的假数据,因此代码中没有数据扩充步骤。
无论如何,当我运行代码时,显示的损失(对于优化器Adam
和SDG
优化器)似乎没有改善,并且准确度很快趋于接近两个图像类中示例数量的比率(即 B/A) . (注意:在周末,我什至尝试了 500 个 epoch ......没有变化。)
对于这两个(最有可能相关的)问题,我还没有找到原因......你可以吗?它是超参数之一,模型设置或实现的任何其他部分是否存在明显故障?可能这只是一些愚蠢的事情,但是在追逐它并使用不同且越来越简化的版本之后,我即将耗尽关于下一步尝试什么的想法。
python - 迁移学习准确率差
我的任务是根据缺陷对种子进行分类。我在 7 个班级中有大约 14k 张图片(它们的大小不相等,有些班级的照片更多,有些班级的照片更少)。我尝试从头开始训练 Inception V3,我的准确率约为 90%。然后我尝试使用带有 ImageNet 权重的预训练模型进行迁移学习。我inception_v3
从applications
没有顶部 fc 层的情况下导入,然后在文档中添加了我自己的。我以以下代码结束:
但我得到了糟糕的结果:45% 的准确率。我认为它应该更好。我有一些假设可能会出错:
- 我从头开始对缩放图像(299x299)和非缩放图像(227x454)进行了训练,但它失败了(或者我的尺寸顺序失败了)。
- 在我使用迁移学习
preprocessing_function=preprocess_input
时(在网上发现它非常重要的文章,所以我决定添加它)。 - 添加
rotation_range=30
、width_shift_range=0.2
、height_shift_range=0.2
和horizontal_flip = True
while 迁移学习以进一步增强数据。 - 也许亚当优化器是个坏主意?例如,我应该尝试 RMSprop 吗?
- 我也应该用小学习率的 SGD 微调一些 conv 层吗?
还是我失败了其他事情?
编辑:我发布了一段训练历史。也许它包含有价值的信息:
EDIT2:随着 InceptionV3 参数的改变:
VGG16进行比较:
python - 如何在 Tensorflow 中实现预训练?如何部分使用检查点文件中保存的权重?
为方便讨论,以下模型进行了简化。
假设我的训练集中大约有 40,000 张 512x512 图像。我正在尝试实施预训练,我的计划如下:
1. 训练一个接收 256x256 图像的神经网络(我们称之为 net_1),并将训练好的模型保存为 tensorflow 检查点文件格式。
我们称这个结构为 net_1_kernel:
并调用其余部分 other_layers:
因此,我们可以用以下形式表示 net_1:
2.在net_1的结构中插入几层,现在称它为net_2。它应该如下所示:
net_2 将 512x512 图像作为输入。
当我训练 net_2 时,我想使用 net_1 的检查点文件中保存的权重和偏差来初始化 net_2 中的 net_1_kernel 部分。我怎样才能做到这一点?
我知道我可以加载检查点来预测测试数据。但在这种情况下,它将加载所有内容(net_1_kernel 和 other_layers)。我想要的是仅加载 net_1_kernel 并将其用于 net_2 中的权重/偏差初始化。
我也知道我可以将检查点文件中的内容打印到 txt,然后复制和粘贴以手动初始化权重和偏差。然而,这些权重和偏差中有很多数字,这将是我最后的选择。
tensorflow - 如何为 Tensorflow Hub 模块的特定输入获取所有层的激活?
我是 TensorFlow Hub 的新手。我想使用I3D模块并将这个网络微调到另一个数据集,我需要获取最后一个隐藏层以及其他一些层的输出。我想知道是否有办法获得其他层的激活。为 I3D 提供的唯一签名只是“默认”。我认为应该有一种方法可以使用 Tensorflow Hub 模块轻松获取所有层的输出。
这将给我最后一层输出。如何获得其他层的输出,例如第二个卷积层的输出?
python - 使用 XGboost 作为分类器而不是神经网络的二值图像分类
我正在寻找可以指导我使用 XGboost 作为 CNN 特征提取后的最终分类器的资源,以及如何保存 CNN 生成的特征并将其用于任何其他技术(如随机森林或 xgboost)的分类。
python-3.x - 如何在 Keras 上将权重从 2D 卷积网络复制到 3D 卷积网络?
我正在尝试在带有 Tensorflow 后端的 Keras 上实现一个 3D convnet,然后是 LSTM 层,用于使用 3D 图像作为输入进行序列生成。
我想从现有预训练模型的权重开始训练,以避免随机初始化的常见问题。
为了从一个基本示例开始,我采用了 VGG-16 并实现了这个网络的“3D”版本(没有 FC 层):
所以我想知道如何将预训练的 VGG-16 的权重加载到 100 个切片中的每一个(我的 3D 图像由 100 个 80x80 rgb 切片组成),
你能给我的任何建议都会很有用,
谢谢
tensorflow - 评估使用 Tensorflow 对象检测 API 创建的模型
我使用 Tensorflow 对象检测 API 训练了一个模型,用于使用卫星图像检测游泳池。我使用“faster_rcnn_inception_v2_coco_2018_01_28”模型进行训练。我生成了一个冻结的推理图 (.pb)。我想评估模型的精度和召回率。有人可以告诉我如何做到这一点,最好不使用 pycocotools,因为我遇到了一些问题。欢迎任何建议:)