C# 使用模型作为层的Keras.NET

C# 使用模型作为层的Keras.NET,c#,keras,deep-learning,C#,Keras,Deep Learning,在Python中,可以使用预训练模型作为层,如下所示(源代码) 导入keras 从keras.applications导入VGG16 从keras导入模型 从keras导入图层 conv_base=VGG16(weights='imagenet', include_top=False, 输入_形状=(150,150,3)) model=models.Sequential() 模型添加(conv_base) model.add(layers.flatte()) model.add(layers.D

在Python中,可以使用预训练模型作为层,如下所示(源代码)

导入keras
从keras.applications导入VGG16
从keras导入模型
从keras导入图层
conv_base=VGG16(weights='imagenet',
include_top=False,
输入_形状=(150,150,3))
model=models.Sequential()
模型添加(conv_base)
model.add(layers.flatte())
model.add(layers.Dense(256,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))
我的问题很简单:有没有一种方法可以在C#中实现?我需要:

  • 如果可能,将Keras.Applications.VGG.VGG16实例转换为Keras.Layers.BaseLayer
  • 使用另一种顺序方法添加它(文档中不存在)
下面是C代码

使用Keras;
使用Keras.Applications.VGG;
使用Keras.Layers;
使用Keras.Models;
VGG16 conv_base=新VGG16(
权重:“imagenet”,
包括:错误,
输入_形:(150、150、3)
);
顺序模型=新的顺序();
model.Add(conv_base);//显然不行
添加(新的展平());
添加(新密度(256,激活:“relu”);
添加(新密度(1,激活:“S形”);

在Sequential.cs中使用此API修改解决:

//
///[自定义]您还可以通过.AddModel()方法添加模型
/// 
///模型。
公共模型(基本模型)
{
var layers=model.ToPython().GetAttr(“层”);
foreach(层中的var层)
{
添加(图层:new BaseLayer(图层为PyObject.PyInstance);
}
}