大家好,
我想使用 Keras 训练一个 CNN 模型进行分类。 据我所知,有许多公开的预训练 CNN 模型,如 VGG、ImageNet 等。但不幸的是,这些预训练模型是使用其他 CNN 框架生成的,如 caffe 或 cuda-convnet。 我们如何使用这些类型的预训练模型或权重来初始化 Keras 序列模型,然后进行微调训练?
谢谢
吴博士
我也希望看到一个教程来说明这一点。
我们正在做这件事。 这绝对是我们希望尽快添加的功能之一。 https://github.com/fchollet/keras/issues/100
如果有人仍然感兴趣,您可以使用具有转换模块的 Keras 的这个分支:
https://github.com/MarcBS/keras
最好的,
马克
你好,
我正在尝试您提到的 caffe 到 keras 转换模块,但是当我运行 caffe2keras.py 时出现此错误
未定义全局名称“network_input”
有什么帮助吗?
我用它来转换caffenet模型,prototxt是这样的:
名称:“咖啡网”
force_backward: 真
输入数据”
input_dim: 1
input_dim: 3
input_dim: 227
input_dim: 227
输入:“标签”
input_dim: 1
input_dim: 1
input_dim: 1
input_dim: 1
层 {
名称:“conv1”
类型:“卷积”
底部:“数据”
顶部:“conv1”
卷积参数{
数字输出:96
内核大小:11
步幅:4
}
}
层 {
名称:“relu1”
类型:“ReLU”
底部:“conv1”
顶部:“conv1”
}
层 {
名称:“池1”
类型:“池化”
底部:“conv1”
顶部:“池1”
pooling_param {
池:最大
内核大小:3
步幅:2
}
}
层 {
名称:“规范1”
类型:“LRN”
底部:“池1”
顶部:“规范1”
lrn_param {
本地大小:5
阿尔法:0.0001
测试版:0.75
}
}
层 {
名称:“conv2”
类型:“卷积”
底部:“规范1”
顶部:“conv2”
卷积参数{
数字输出:256
垫:2
内核大小:5
组:2
}
}
层 {
名称:“relu2”
类型:“ReLU”
底部:“conv2”
顶部:“conv2”
}
层 {
名称:“pool2”
类型:“池化”
底部:“conv2”
顶部:“pool2”
pooling_param {
池:最大
内核大小:3
步幅:2
}
}
层 {
名称:“规范2”
类型:“LRN”
底部:“pool2”
顶部:“规范2”
lrn_param {
本地大小:5
阿尔法:0.0001
测试版:0.75
}
}
层 {
名称:“conv3”
类型:“卷积”
底部:“norm2”
顶部:“conv3”
卷积参数{
数字输出:384
垫:1
内核大小:3
}
}
层 {
名称:“relu3”
类型:“ReLU”
底部:“conv3”
顶部:“conv3”
}
层 {
名称:“conv4”
类型:“卷积”
底部:“conv3”
顶部:“conv4”
卷积参数{
数字输出:384
垫:1
内核大小:3
组:2
}
}
层 {
名称:“relu4”
类型:“ReLU”
底部:“conv4”
顶部:“conv4”
}
层 {
名称:“conv5”
类型:“卷积”
底部:“conv4”
顶部:“conv5”
卷积参数{
数字输出:256
垫:1
内核大小:3
组:2
}
}
层 {
名称:“relu5”
类型:“ReLU”
底部:“conv5”
顶部:“conv5”
}
层 {
名称:“pool5”
类型:“池化”
底部:“conv5”
顶部:“pool5”
pooling_param {
池:最大
内核大小:3
步幅:2
}
}
层 {
名称:“fc6”
类型:“内部产品”
底部:“pool5”
顶部:“fc6”
内部产品参数{
数字输出:4096
}
}
层 {
名称:“relu6”
类型:“ReLU”
底部:“fc6”
顶部:“fc6”
}
层 {
名称:“drop6”
类型:“辍学”
底部:“fc6”
顶部:“fc6”
dropout_param {
dropout_ratio: 0.5
}
}
层 {
名称:“fc7”
类型:“内部产品”
底部:“fc6”
顶部:“fc7”
内部产品参数{
数字输出:4096
}
}
层 {
名称:“relu7”
类型:“ReLU”
底部:“fc7”
顶部:“fc7”
}
层 {
名称:“drop7”
类型:“辍学”
底部:“fc7”
顶部:“fc7”
dropout_param {
dropout_ratio: 0.5
}
}
层 {
名称:“fc8”
类型:“内部产品”
底部:“fc7”
顶部:“fc8”
内部产品参数{
num_output: 1000
}
}
真的是一个重要的功能......
这个 Caffe-to-Keras 重量转换器正是您要找的:
https://github.com/pierluigiferrari/caffe_weight_converter
它将.caffemodel
文件转换为.h5
重量文件。 它仅转换权重,而不是模型定义,但无论如何,权重确实是您所需要的。
对于任何给定的模型,模型定义要么只需要 Keras 核心库层,在这种情况下在 Keras 中手动编写非常容易,或者模型定义很复杂并且具有自定义层类型,在这种情况下模型定义转换器可能会失败反正。
转换后的新 keras 模型需要什么形状输入? (3,224,224) 还是 (224,224,3)? 因为 caffe 与 (3,224,224) 一起工作,而 keras 与 (224,224,3) 一起工作......
最有用的评论
我们正在做这件事。 这绝对是我们希望尽快添加的功能之一。 https://github.com/fchollet/keras/issues/100