python - 使用函数式 API 初始化后如何更改网络?

标签 python neural-network theano conv-neural-network keras

我有一个相当“简单”的问题。当我使用函数式 API 创建网络时:

layer2 = Dense(8, name="layer2")(layer1)

然后用

初始化它
model = Model(input=..., output=...)

之后想换图层怎么办?如果我 .pop() 然后 .append() 一个新层,没有任何变化 - 输出保持不变。我认为这是因为输出仍然是预先定义的。

我遇到的确切问题是:我加载了一个预训练的 AlexNet 及其权重,但随后我想重新训练最后一个 Dense 层,用于 8 个类而不是 1000 个类的分类任务。为此,我想删除最后一层并重新添加它们。

我找到了解决方法 ( Changing pretrained AlexNet classification in Keras ),但我认为应该有更简单的方法。此外,我认为我的解决方法不适用于 GoogLeNet所以我真的很想知道(或提示)如何处理这种情况。

最佳答案

Model 对象不持有权重,层持有。您可以使用 model.load_weights() 为您的模型加载权重,然后根据您拥有的层创建一个新层,而不会丢失层的初始化。

例如:

model.load_weights(f)
newClassificationLayer = Dense(8, activation='softmax')(lastCnnLayer)
model = Model(input=oldInput, output=newClassificationLayer)

要确保所有其他层都被卡住并且除了新层之外不接受训练,您可以为要卡住的每个层设置 trainable=False。例如:

lastCnnLayer.trainable = False

关于python - 使用函数式 API 初始化后如何更改网络?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38053073/

相关文章:

Python-将元组值添加到字典中的重复键

python - 一个 url 是通过 selenium IDE 正确启动的,但不是通过脚本

python - 在 Django 中交叉导入

python-3.x - 使用 KerasClassifier randomsearchcv 进行超参数优化,TypeError : 'list' object cannot be interpreted as an integer

machine-learning - 用于文件解密的神经网络 - 可能吗?

python - 你如何在 Tensorflow 中进行预测

python - 使用 lambda 提高迭代数据帧时的代码效率

python - 在theano中按行规范化矩阵

python - 为什么 Theano 测试会因许多 "KnownFailureTest"而失败?

python - 了解图像是否与用于训练卷积神经网络的数据集相关的有效方法