tensorflow - 使用 MobileNetV1 的多位数分类器
问题描述
我想训练一个模型能够对图像中的 16 个数字进行分类,数字的数量是常数。所以我像这些图像一样创建我的数据集(在 SUN 数据集背景上打印具有不同字体和大小的随机 16 个数字):
我的训练数据集大约有 3000 张图像和 600 张用于验证的图像。
所以我想使用 MobileNetV1 作为特征提取器,并为每个数字连接到 16 个 softmax 输出层。
这是我创建模型的代码片段
base_model = MobileNet(input_shape=None,
alpha=0.25,
depth_multiplier=1,
include_top=False,
weights='imagenet,
input_tensor=None,
pooling=None)
x = base_model.output
x = layers.AvgPool2D()(x)
digits = []
for i in range(16):
temp = layers.Conv2D(10, 1, 1, padding='same', name=str(i) + '_digits')(x)
temp = layers.Dense(10, activation='softmax')(temp)
digits.append(temp)
model = Model(inputs=base_model.inputs, outputs=digits)
model.compile(optimizer=optimizers.RMSprop(), loss='categorical_crossentropy',
metrics=['accuracy'])
所以我的数据集图片大小是(650,65),训练张量形状是(3000,650,65,3),归一化值在-1和1之间
我的火车标签是一个热张量的 16 个数组,形状为 (16,3000,10)
我的模型编译成功并开始训练,但我的损失和 val_loss 在时期没有得到改善。
基本上我想创建像这张图片这样的模型,因为这个模型在这个数字分类问题上效果很好。
该模型架构的顶部类似于 MobileNetV1,输入是调整大小和归一化块。
解决方案
推荐阅读
- c# - 如何获取特定项目列表框 C# MVVM WPF
- python - 如何操作 Python 对象以按时获取信息
- api - 如何获取.net core 3.1 中的依赖项列表?
- python - 删除角色(discord.py 重写)
- angular - 为什么 console.log 打印多次
- python - 强制 geopy 返回多面体
- java - Eclipse 使用不存在的 jre 版本来解决 tools.jar 的 maven 依赖
- python - 如何使用python在循环中更改变量的名称
- sql - 如何在 SQL 中选择具有变量名称的表列?
- python - 列中具有重复项的数据框映射到另一列