- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Resnet50 模型进行迁移学习,总共使用 20 个场景中的 100,000 张图像(MIT Place365 数据集)。我只训练了最后 160 层(由于内存限制)。问题是我得到了相当高的准确性但验证准确性极低,我认为这可能是一个过度拟合的问题但我不知道如何解决它。如果有人能就如何解决我的低 val_acc 问题给我建议,我将不胜感激,非常感谢。我的代码如下:
V1 = np.load("C:/Users/Desktop/numpydataKeras_20_val/imgonehot_val_500.npy")
V2 = np.load("C:/Users/Desktop/numpydataKeras_20_val/labelonehot_val_500.npy")
net = keras.applications.resnet50.ResNet50(include_top=False, weights='imagenet', input_tensor=None, input_shape=(224, 224, 3))
x = net.output
x = Flatten()(x)
x = Dense(128)(x)
x = Activation('relu')(x)
x = Dropout(0.5)(x)
output_layer = Dense(20, activation='softmax', name='softmax')(x)
net_final = Model(inputs=net.input, outputs=output_layer)
for layer in net_final.layers[:-160]:
layer.trainable = False
for layer in net_final.layers[-160:]:
layer.trainable = True
net_final.compile(Adam(lr=.00002122), loss='categorical_crossentropy', metrics=['accuracy'])
def data_generator():
n = 100000
Num_batch = 100000/100
arr = np.arange(1000)
np.random.shuffle(arr)
while (True):
for i in arr:
seed01 = random.randint(0,1000000)
X_batch = np.load( "C:/Users/Desktop/numpydataKeras/imgonehot_"+str((i+1)*100)+".npy" )
np.random.seed(seed01)
np.random.shuffle(X_batch)
y_batch = np.load( "C:/Users/Desktop/numpydataKeras/labelonehot_"+str((i+1)*100)+".npy" )
np.random.seed(seed01)
np.random.shuffle(y_batch)
yield X_batch, y_batch
weights_file = 'C:/Users/Desktop/Transfer_learning_resnet50_fit_generator_02s.h5'
early_stopping = EarlyStopping(monitor='val_acc', patience=5, mode='auto', verbose=2)
model_checkpoint = ModelCheckpoint(weights_file, monitor='val_acc', save_best_only=True, verbose=2)
callbacks = [early_stopping, model_checkpoint]
model_fit = net_final.fit_generator(
data_generator(),
steps_per_epoch=1000,
epochs=5,
validation_data=(V1, V2),
callbacks=callbacks,
verbose=1,
pickle_safe=False)
打印结果如下:
Epoch 1/5
1000/1000 [==============================] - 3481s 3s/step - loss: 1.7917 - acc: 0.4757 - val_loss: 3.5872 - val_acc: 0.0560
Epoch 00001: val_acc improved from -inf to 0.05600, saving model to C:/Users/Desktop/Transfer_learning_resnet50_fit_generator_02s.h5
Epoch 2/5
1000/1000 [==============================] - 4884s 5s/step - loss: 1.1287 - acc: 0.6595 - val_loss: 4.2113 - val_acc: 0.0520
Epoch 00002: val_acc did not improve from 0.05600
Epoch 3/5
1000/1000 [==============================] - 4964s 5s/step - loss: 0.8033 - acc: 0.7464 - val_loss: 4.9595 - val_acc: 0.0520
Epoch 00003: val_acc did not improve from 0.05600
Epoch 4/5
1000/1000 [==============================] - 4961s 5s/step - loss: 0.5677 - acc: 0.8143 - val_loss: 4.5484 - val_acc: 0.0520
Epoch 00004: val_acc did not improve from 0.05600
Epoch 5/5
1000/1000 [==============================] - 4928s 5s/step - loss: 0.3999 - acc: 0.8672 - val_loss: 4.6155 - val_acc: 0.0400
Epoch 00005: val_acc did not improve from 0.05600
最佳答案
正在关注 https://github.com/keras-team/keras/issues/9214#issuecomment-397916155看来批量归一化应该是可训练的。
以下代码可以替换您设置/取消设置可训练层的循环:
for layer in model.layers:
if hasattr(layer, 'moving_mean') and hasattr(layer, 'moving_variance'):
layer.trainable = True
K.eval(K.update(layer.moving_mean, K.zeros_like(layer.moving_mean)))
K.eval(K.update(layer.moving_variance, K.zeros_like(layer.moving_variance)))
else:
layer.trainable = False
在我自己的数据上,我需要减少批量大小以避免 OOM,我现在有:
Epoch 1/10
470/470 [==============================] - 90s 192ms/step - loss: 0.3513 - acc: 0.8660 - val_loss: 0.1299 - val_acc: 0.9590
Epoch 2/10
470/470 [==============================] - 83s 177ms/step - loss: 0.2204 - acc: 0.9163 - val_loss: 0.1276 - val_acc: 0.9471
Epoch 3/10
470/470 [==============================] - 83s 177ms/step - loss: 0.2219 - acc: 0.9184 - val_loss: 0.1048 - val_acc: 0.9589
Epoch 4/10
470/470 [==============================] - 83s 177ms/step - loss: 0.1813 - acc: 0.9327 - val_loss: 0.1857 - val_acc: 0.9303
警告,这可能会影响准确性,您必须卡住模型以避免出现奇怪的推论。但这似乎是对我有用的唯一方法。
另一条评论 https://github.com/keras-team/keras/issues/9214#issuecomment-422490253如果它是批量归一化,则只检查图层名称以将其设置为可训练,但它对我来说没有任何改变。也许它可以帮助您的数据集。
关于python - Keras Transfer Learning Resnet50 using fit_generator got high acc but low val_acc 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53134404/
从下面的链接中读取,我相信当 Nifi 集群中的一个节点出现故障时,数据将不会被处理,直到该节点恢复运行 --- 因此由故障节点处理的流文件/数据不会被另一个节点接管集群中的节点。 https://c
我在这两篇论文中发现了“high-capacity cnn”这个短语: 1. Rich feature hierarchies for accurate object detection and se
目前我想使用来自 http://codepen.io/JaxoDI/pen/DtsdH 的评级系统.但目前它在您从右向左悬停时有效。请随意在给定的链接中尝试一下。但我想要一个从左到右悬停的评级系统。
我读过多篇文章,包括 Jon Bentley 的二分查找章节。这是我对 CORRECT 二进制搜索逻辑的理解,它在我所做的简单测试中有效: binarysearch (arr, low, high,
我的问题与下面的有点不同 CSS Float Logic .我的问题是关于 height 比这更具体的概念。 这里有规则 https://www.w3.org/TR/CSS22/visuren.htm
当我们说“高阶”函数时,我怀疑“阶”的真正含义是什么?例如,我有一个嵌入式函数调用: f.g.h 那么它叫“三阶”函数吗? “高阶”函数是静态函数累加的概念吗?然后当我有一个递归函数 f 时,在运行时
我正在研究树问题 Convert Sorted Array to Binary Search Tree - LeetCode Given an array where elements are sor
我最近将 iPhone 设备中的 iOS 升级到 12.2(为我的应用程序“Match4app”提供对最新版本的支持),这似乎与 Xcode 10.1 不兼容。我应该将 Xcode 更新到 10.2
我了解 >>> 修复了溢出:当添加两个大的正长时,您最终可能会得到一个负数。有人能解释一下这种按位移位如何神奇地解决溢出问题吗?它与 >> 有何不同? 我的怀疑:我认为这与 Java 使用二进制补码这
我有一个关于托管高流量 Rails 应用程序的问题。问题是我有 3/4 年的 Ruby on Rails 应用程序经验,但我以前从未有过高流量网站。我真的很兴奋,因为这对我和我的同事来说是“下一个层次
人们说 Delphi 在整数运算上生成了非常好的优化代码。我在 Delphi 2007 中尝试了以下示例,并看到编译器生成的汇编代码。 program p1000; {$APPTYPE CONSOLE
我目前正在构建一个混合云解决方案,需要将消息写入队列以供稍后处理。队列具有高可用性(99.999+% 的正常运行时间)是绝对必要的。 我的选择是将消息读/写到本地 ZeroMQ 高可用性对或 Azur
我正在使用 Highcharts 创建此条形图。条形的对齐方式不在部分的中间(就像第一个红色条形图不在 2016 年 1 月的中间)。是否有任何选项可以将所有栏放置在每个部分的中间? 最佳答案 我找到
我一直在阅读 Framework Design Guidelines 一书,这是一本关于在 .NET 中设计框架的书,其中摘录了框架设计者对每个部分(例如参数设计、异常处理等)所做的决定。 在参数设计
我正在尝试停止Macbook上的Apache服务器。 我尝试了以下 $ sudo apachectl stop /System/Library/LaunchDaemons/org.apache.htt
如何在高可用性中部署 apache Airflow (正式称为 airbnb 的 Airflow )调度程序? 我不是在询问显然应该在高可用性配置中部署的后端 DB 或 RabbitMQ。 我的主要关
我的内部循环包含一个计算,分析显示有问题。 这个想法是采用灰度像素 x (0 .5,x =0)-1, ... x, erf(x), ... x, tanh(x), .
我们如何定制 HighChart 的 Bubble Chart具有不同的形状。 就像我们代表 4 种不同的事件类型一样,我们不仅需要 4 种不同颜色的气泡,而且还需要每个气泡具有不同的形状,如圆形、三
刚刚注意到我在 Azure 中的文件共享存储出现“ClientOtherError”的概率非常高。他们的成功率在 50-100% 之间。 有人有任何经验可以解释为什么会这样吗? 所附图表以红色/橙色显
我是Elasticsearch的新手,遇到了一个问题,甚至在故障排除方面也遇到了困难。我的Elasticsearch(1.1.1)当前正在使CPU处于运行状态,即使没有进行搜索或建立索引也是如此。 C
我是一名优秀的程序员,十分优秀!