Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 训练精度提高,但验证精度保持在0.5,模型预测每个验证样本的等级几乎相同_Python_Tensorflow_Keras_Deep Learning_Classification - Fatal编程技术网

Python 训练精度提高,但验证精度保持在0.5,模型预测每个验证样本的等级几乎相同

Python 训练精度提高,但验证精度保持在0.5,模型预测每个验证样本的等级几乎相同,python,tensorflow,keras,deep-learning,classification,Python,Tensorflow,Keras,Deep Learning,Classification,我正在使用keras tensorflow后端在延时IVF胚胎图像数据集上实现ResNet50+LSTM和注意模型 数据集由大约220个样本组成,我使用85%-15%的训练/验证分割(203个用于训练,27个用于验证) 我的模型能够达到0.80+的训练精度,但验证精度要么停留在0.5左右,要么保持在0.5左右,验证损失几乎是训练损失的两倍 这仅仅是一个过度合身的问题吗 如果没有,我如何调试和改进验证集的性能 #我尝试过的事情: 我尝试添加正则化(L1,0.01)/退出层(0.5)/减少神经元(1

我正在使用keras tensorflow后端在延时IVF胚胎图像数据集上实现ResNet50+LSTM和注意模型

数据集由大约220个样本组成,我使用85%-15%的训练/验证分割(203个用于训练,27个用于验证)

我的模型能够达到0.80+的训练精度,但验证精度要么停留在0.5左右,要么保持在0.5左右,验证损失几乎是训练损失的两倍

这仅仅是一个过度合身的问题吗

如果没有,我如何调试和改进验证集的性能

#我尝试过的事情:

我尝试添加正则化(L1,0.01)/退出层(0.5)/减少神经元(1024到512到256),但没有一个有效)

我还通过减去平均值和除以标准差来规范化我的数据

我使用的是Adam优化器,学习速度为1e-5,没有重量衰减。训练前,图像被洗牌

#下面是我的模型和进度条的代码

#进度条:

Epoch 1/40

150/150 [==============================] - 28s 189ms/step - loss: 2.1318 - acc: 0.5267 - val_loss: 4.8806 - val_acc: 0.5556



Epoch 00001: val_loss improved from inf to 4.88055, saving model to result/resnetmodel.hdf5

Epoch 2/40

150/150 [==============================] - 14s 94ms/step - loss: 1.9957 - acc: 0.5867 - val_loss: 4.8210 - val_acc: 0.5000



Epoch 00002: val_loss improved from 4.88055 to 4.82100, saving model to result/resnetmodel.hdf5

Epoch 3/40

150/150 [==============================] - 14s 94ms/step - loss: 1.8062 - acc: 0.6200 - val_loss: 4.9689 - val_acc: 0.5000



Epoch 00003: val_loss did not improve from 4.82100

Epoch 4/40

150/150 [==============================] - 14s 91ms/step - loss: 1.7516 - acc: 0.6267 - val_loss: 5.0284 - val_acc: 0.5000



Epoch 00004: val_loss did not improve from 4.82100

Epoch 5/40

150/150 [==============================] - 14s 94ms/step - loss: 1.6508 - acc: 0.7000 - val_loss: 4.9873 - val_acc: 0.4444



Epoch 00005: val_loss did not improve from 4.82100

Epoch 6/40

150/150 [==============================] - 14s 92ms/step - loss: 1.5003 - acc: 0.7733 - val_loss: 4.9800 - val_acc: 0.4444



Epoch 00006: val_loss did not improve from 4.82100

Epoch 7/40

150/150 [==============================] - 14s 96ms/step - loss: 1.4614 - acc: 0.7667 - val_loss: 4.9435 - val_acc: 0.5000



Epoch 00007: val_loss did not improve from 4.82100

Epoch 8/40

150/150 [==============================] - 14s 90ms/step - loss: 1.5480 - acc: 0.6800 - val_loss: 4.9345 - val_acc: 0.5000



Epoch 00008: val_loss did not improve from 4.82100

Epoch 9/40

150/150 [==============================] - 14s 93ms/step - loss: 1.4334 - acc: 0.7667 - val_loss: 5.0452 - val_acc: 0.5000



Epoch 00009: val_loss did not improve from 4.82100

Epoch 10/40

150/150 [==============================] - 14s 94ms/step - loss: 1.4344 - acc: 0.7667 - val_loss: 5.1768 - val_acc: 0.4444



Epoch 00010: val_loss did not improve from 4.82100

Epoch 11/40

150/150 [==============================] - 15s 98ms/step - loss: 1.3369 - acc: 0.8533 - val_loss: 5.1331 - val_acc: 0.4444



Epoch 00011: val_loss did not improve from 4.82100

Epoch 12/40

150/150 [==============================] - 14s 93ms/step - loss: 1.2834 - acc: 0.8133 - val_loss: 5.1265 - val_acc: 0.4444



Epoch 00012: val_loss did not improve from 4.82100

Epoch 13/40

150/150 [==============================] - 14s 91ms/step - loss: 1.3007 - acc: 0.8200 - val_loss: 5.1941 - val_acc: 0.4444



Epoch 00013: val_loss did not improve from 4.82100

Epoch 14/40

150/150 [==============================] - 14s 94ms/step - loss: 1.2358 - acc: 0.8533 - val_loss: 5.3716 - val_acc: 0.4444



Epoch 00014: val_loss did not improve from 4.82100

Epoch 15/40

150/150 [==============================] - 14s 92ms/step - loss: 1.2823 - acc: 0.8000 - val_loss: 5.3877 - val_acc: 0.4444

纪元00015:val_损失没有从4.82100改善

纪元00015:提前停止

评估:-加载数据

----基于评估的预测-----

事实=[1.0.],预测=[0.03809702 0.96190304]

事实=[1.0.],预测=[0.9803326 0.0196674]

事实=[1.0.],预测=[9.9986279e-01 1.3717638e-04]

事实=[1.0.],预测=[0.98158103 0.01841903]

事实=[1.0.],预测=[0.99492776 0.00507224]

事实=[1.0.],预测=[0.70435154 0.29564843]

事实=[1.0.],预测=[4.1277369e-04 9.9958724e-01]

事实=[1.0.],预测=[0.9818978 0.01810225]

事实=[1.0.],预测=[0.91195923 0.08804072]

事实=[0.1.],预测=[0.986312 0.013688]

事实=[0.1.],预测=[0.9985434 0.00145668]

事实=[0.1.],预测=[0.80424094 0.195759]

事实=[0.1.],预测=[0.9214819 0.07851809]

事实=[0.1.],预测=[0.03754392 0.96245605]

事实=[0.1.],预测=[9.9976009e-01 2.3989924e-04]

事实=[0.1.],预测=[0.98681134 0.01318868]

事实=[0.1.],预测=[0.9984666 0.0015334]

事实=[0.1.],预测=[0.7229417 0.27705824]

#这是我的模型:


x=输入(形状=(40,config.img\u形状,config.img\u形状,config.img\u通道))
如果config.base_model==“inception_v3”:
cnn=InceptionV3(权重=None,include\u top=False,pooling=“avg”)
elif config.base_model=='ResNet50':
cnn=ResNet50(权重=None,包括_top=False,pooling=“avg”)
cnn.加载权重(配置预训练路径)
对于cnn.layers中的层:
layer.trainable=错误
提取的特征=时间分布(cnn)(x)
激活=双向(LSTM(config.num\u units\u LSTM,return\u sequences=True,recurrent\u activation='relu',recurrent\u initializer='glorot\u uniform',name='Bidirectional\u LSTM'))(提取的特征)
激活=辍学(0.5)(激活)
注意=时间分布(密集(1,activation='tanh'),name=“context\u vector”)(激活)
注意=展平()(注意)
注意=激活('softmax',name=“conext\U权重”)(注意)
注意=RepeatVector(config.num_unitslstm*2)(注意)
注意=排列([2,1])(注意)
sent_representation=merge.multiply([激活,注意])
发送表示法=λ(λxin:K.sum(xin,轴=1))(发送表示法)
sent_表示法=BatchNormalization()(sent_表示法)
预测=密集(config.num_类,激活='softmax')(已发送_表示)
模型=模型(输入=x,输出=预测)
数据集由大约220个样本组成,我使用85%-15%的训练/验证分割(203个用于训练,27个用于验证)

这仅仅是一个过度合身的问题吗

听起来很有可能,是的。对于这样一个深度网络,220个样本是非常非常小的数据集。从这么小的一组数据中学习如何很好地概括是不太可能的

如果没有,我如何调试和改进验证集的性能

在理想情况下,再抓取10万个左右的样本,并将它们添加到数据集中

接受这一点可能是不切实际的,您可以尝试以下一种或多种策略:

  • 用于人为增加数据集的大小
  • 而不是从零开始训练深层网络。使用tensorflow_hub进行调查,以便只训练最后一层(和或微调)预先训练的网络()

    • 我也遇到了同样的问题:

      • 使用keras.preprocessing.image中的
        ImageDataGenerator动态执行图像增强
      • 使用转移学习、VGG16和MobileNetV2等,并预先训练权重
      但我还是得到了0.5瓦卢的损失。 这解决了我的问题,我希望它能帮助你:

      替换
      model=model(输入=x,输出=预测)
      使用
      模型=模型(输入=x.输入,输出=预测)