我正在尝试在Keras中创建模型,以便根据图片进行数值预测。我的模型具有 密集的net121
卷积基础,顶部还有几个附加层。除最后两个图层外的所有图层均设置为layer.trainable = False
。我的损失是均方误差,因为这是一项回归任务。在训练期间,我得到了loss: ~3
,而对同一批数据的评估给出loss: ~30
:
model.fit(x=dat[0],y=dat[1],batch_size=32)
时代1/1 32/32 [==============================]-0s 11ms / step- 损耗:
2.5571
model.evaluate(x=dat[0],y=dat[1])
32/32 [==============================]-2s 59ms / step 29.276123046875
在训练和评估期间,我提供了完全相同的32张图片。我还使用的预测值计算了损失y_pred=model.predict(dat[0])
,然后使用numpy构造了均方误差。结果与我从评估中得到的结果相同(即29.276123
…)。
有人建议这种行为可能是由于BatchNormalization
卷积基础中的层(有关github的讨论)。当然,BatchNormalization
我模型中的所有图层也都已设置layer.trainable=False
为。也许有人遇到了这个问题并想出了解决方案?
看起来我找到了解决方案。正如我所建议的,问题出在BatchNormalization层上。他们做树的东西
当一个集trainable
到False
,这两个参数冻结和层也停止对平均和std收集统计量。但是看起来该层仍在 使用训练批处理的
训练时间内执行归一化。这很可能是喀拉拉邦的一个bug,或者出于某些原因,他们故意这样做了。结果, 即使可训练属性设置为False
,训练时间期间正向传播的计算与预测时间 也 不同。
我可以想到两种可能的解决方案:
model=model_base+model_top
。之后,使用model_base
提取特征model_base.predict()
,然后将这些特征输入model_top
并仅训练model_top
。我刚刚尝试了第一个解决方案,它似乎正在工作:
model.fit(x=dat[0],y=dat[1],batch_size=32)
Epoch 1/1
32/32 [==============================] - 1s 28ms/step - loss: **3.1053**
model.evaluate(x=dat[0],y=dat[1])
32/32 [==============================] - 0s 10ms/step
**2.487905502319336**
这是在经过一些培训之后-需要等待,直到收集到有关均值和标准差的足够统计信息为止。
第二种解决方案我还没有尝试过,但是我很确定它会起作用,因为在训练和预测期间的前向传播将是相同的。
Update. I found a great blog post where this issue has been discussed in all
the details. Check it outhere
我试图设计和训练一个卷积神经网络来识别图像中的圆形细胞。我在完整图像的“切口”上训练它,这些图像中间要么有一个圆(正训练样本),要么没有(负训练样本)。 中间有一个圆圈的图像示例(热图颜色不稳定,图像均为灰度):http://imgur.com/a/6q8LZ 我希望网络输出是一个二进制位图,而不仅仅是对两种类型的输入图像(圆形或不在中间)进行分类,如果输入图像中没有圆形,则该位图是一个统一的值(
文章信息 通过本教程,你可以掌握技能:使用预先训练的词向量和卷积神经网络解决一个文本分类问题 本文代码已上传到Github 本文地址:http://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html 本文作者:Francois Chollet 什么是词向量? ”词向量”(词嵌入)是将一类将词的语义映射到向量空间
本文向大家介绍Keras使用ImageNet上预训练的模型方式,包括了Keras使用ImageNet上预训练的模型方式的使用技巧和注意事项,需要的朋友参考一下 我就废话不多说了,大家还是直接看代码吧! 在以上代码中,我们首先import各种模型对应的module,然后load模型,并用ImageNet的参数初始化模型的参数。 如果不想使用ImageNet上预训练到的权重初始话模型,可以将各语句的中
我使用以下代码将预先训练的ResNet50 keras模型导出到tensorflow中,以便为tensorflow提供服务: 最后,我使用以下函数对tensorflow服务进行预测: 然后,我从一个ipython shell中使用上面的两个函数从ImageNet的val集中选择随机的imagenes,我已经在本地存储了这些ImageNet。问题是tensorflow服务总是为我发送的所有图像返回相
这是我的问题。我训练了一个卷积神经网络,用tensorflow将图像分为两类。我现在想知道如何使用神经网络的权重,并在未标记的随机图像上进行测试。tensorflow中是否有这样的函数,或者我现在应该自己运行卷积吗?
/usr/local/lib/python3.6/dist-packages/keras/backend/tensorflow_backend.py:174:不推荐使用名称tf.get_default_session。请改用tf.compat.v1.get_default_session。 /usr/local/lib/python3.6/dist-packages/keras/backend/t