当前位置: 首页 > 知识库问答 >
问题:

验证精度停留在0.5073

袁河
2023-03-14

我试图创建一个回归模型,但我的验证精度保持在.5073。我试图训练图像,让网络找到一个物体的位置和它覆盖的粗糙区域。我增加了解冻层和精度的平台下降到.4927。如果能帮我找出我做错了什么,我将不胜感激。

base = MobileNet(weights='imagenet', include_top=False, input_shape=(200,200,3), dropout=.3)
location = base.output
location = GlobalAveragePooling2D()(location)
location = Dense(16, activation='relu', name="locdense1")(location)
location = Dense(32, activation='relu', name="locdense2")(location)
location = Dense(64, activation='relu', name="locdense3")(location)
finallocation = Dense(3, activation='sigmoid', name="finalLocation")(location)

model = Model(inputs=base_model.input,outputs=finallocation)#[types, finallocation])
for layer in model.layers[:91]: #freeze up to 87
    if ('loc' or 'Loc') in layer.name:
        layer.trainable=True
    else: layer.trainable=False

optimizer = Adam(learning_rate=.001)
model.compile(optimizer=optimizer, loss='mean_squared_error', metrics=['accuracy'])
history = model.fit(get_batches(type='Train'), validation_data=get_batches(type='Validation'), validation_steps=500, steps_per_epoch=1000, epochs=10)

数据是由一个包含图像数据和一些标签的tf记录文件生成的。这是发电机的最后一点。

IMG_SIZE = 200
def format_position(image, positionx, positiony, width):
    image = tf.cast(image, tf.float32)
    image = (image/127.5) - 1
    image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
    labels = tf.stack([positionx, positiony, width])
    return image, labels

获取批处理:数据集从两个目录加载,其中包含tfrecord文件,一个用于培训,另一个用于验证

def get_batches(type):
    dataset = load_dataset(type=type)
    if type == 'Train':
        databatch = dataset.repeat()
    databatch = dataset.batch(32)
    databatch = databatch.prefetch(2)
    return databatch

```positionx positiony width``` are all normalized from 0-1 (relative position with respect to the image.
Here is an example output:

1月1/1000/1000 1000/1000(第1==========================================================================================================================================================================================第4-233-233ms/步-损失:0.0267-准确:0.5867-准确:0.5833-瓦卢损失:0.5833-瓦卢-损失:0.0330-损失:0.0330-瓦利:0.0330-瓦-瓦-准确:0.30-瓦-瓦-准确:准确:准确:0.30-瓦-准确:准确:准确:准确:准确:准确:0.0330-瓦-准确:准确:准确:准确:准确:0.30-准确:准确:准确:准确:0.0330-准确:准确:准确:准确:准确:0.30-准确:准确:准确:准确:准确:0.30-============]-221s 221ms/步-损耗:0.0238-精度:0.6309-val_损耗:0.0312-val_精度:0.5073

共有1个答案

裘丰
2023-03-14
  1. 您的模型中的最终激活函数不应为sigmoid,因为它将输出介于01之间的数字,并且我假设您的标签(即positionxpositionywidth不在此范围内)。您可以将其替换为'linear''relu'
  2. 你在做回归,你的损失函数是“均方误差”。不能将精度用作度量函数。应使用'mae'(平均绝对误差)或'mse'检查预测值与实际目标值之间的差异
 类似资料:
  • 我正在训练卷积网络,一旦验证错误达到90%,我想停止训练。我想过使用EarlyStop并将基线设置为0.90,但是每当给定时代数的验证精度低于该基线时,它就会停止训练(此处仅为0)。所以我的代码是: 当我使用此代码时,我的训练将在第一个历元后停止,并显示给定的结果: 培训60000个样本,验证10000个样本 纪元1/30 60000/60000 - 7s-损失: 0.4600-acc: 0.83

  • 我正在使用神经网络来解决二分类问题,但我遇到了一些麻烦。有时在运行我的模型时,我的验证精度根本没有变化,有时它工作得很好。我的数据集有1200个样本,有28个特征,我有一个类不平衡(200类a 1000类b)。我所有的特征都被标准化了,并且在1到0之间。正如我之前所说,这个问题并不总是发生,但我想知道为什么并修复它 我曾尝试更改优化功能和激活功能,但这对我没有好处。我还注意到,当我增加网络中的神经

  • 问题内容: 文档的内容如下(强调我的意思)。 此方法只能用于测量经过的时间,与系统或挂钟时间的任何其他概念无关。返回的值表示自某个固定但任意时间以来的纳秒(也许是将来的时间,因此值可能为负)。 此方法提供纳秒精度,但不一定提供纳秒精度。 无法保证值更改的频率。 如我所见,这可以用两种不同的方式解释: 在句子中 大胆 上面是指个人的返回值。然后,将在数字意义上理解精度和准确性。也就是说,精度是指有效

  • 我的Keras CNN模型(基于AlexNet的一个实现)的训练精度总是接近0.5(在+-0.02以内),验证精度总是精确的0.5。它是一个二进制分类模型,其中train/val的分割大约为85/15,并且在这两个集合中,图像对每个类进行50/50的分割。

  • 我在文本分类任务中使用Pytorch GRU训练模型(输出维度为5)。我的网络实现如下代码所示。 我用的是nn。损失函数的CrossEntropyLoss()和optim。SGD for optimizer。损失函数和优化器的定义是这样给出的。 我的培训程序大致如下所示。 当我训练这个模型时,验证准确性和损失是这样报告的。 它表明验证损失在第9个epoch之后不会减少,并且验证准确性自第一个epo

  • 当我使用PostgreSQL 11.8中的函数构建json时,我试图截断双精度值,但运气不好。更准确地说,我试图将19.98999999999984数字截断为两位小数,但要确保它不会四舍五入到20.00(它就是这样做的),而是保持在19.98。 顺便说一句,我到目前为止尝试的是使用: 1),我得到值20.00 2)我得到值19.99- [42883]错误:函数舍入(双精度,整数)不存在 下面是我使