我正在寻找一种方法,使用CNTK,使用加载的VGG16模型将较低层输出转发到更高层。
我的问题背景是:
我重新实现了Fully Convolutional Networks for Semantic Segmentation的某些部分,但后来遇到了一些问题:从this example开始,我首先用完全卷积替换完全连接的层,并将模型定义部分中的序列切割成块。我可以简单地访问pool3
和pool4
以供日后使用。 Convolution2D((1,1), num_classes, name='score_pool4')(pool4)
。这很好但在构建我注意到的模型之后,我需要实现一种自己的方式来读取批处理,因为内置读取器现在不支持2D标签。现在我只是使用OpenCV阅读图像并用for循环替换training_session(...).train()
并且trainer.train_minibatch({model['features']: my_loaded_features, model['labels']: my_2D_labels})
这很好用但因为删除training_session
部分我不喜欢我知道在哪里可以应用现有的VGG16重量。
我的问题是:
我搜索transfer learning examples这些人使用C.load_model(...)
加载模型,然后克隆所需的图层,但现在我想知道如何访问 cloned_layers-> pool4 (在加载模型的中间)如果我也想在更深的层中使用它。
我尝试了Convolution2D((1,1), num_classes, name='score_pool4')(cloned_layers.find_by_name('pool4'))
,但由于使用了权重变量中的“未知形状信息”,我在学习初始化时得到了一些错误消息。
那么如何在加载的模型中访问这些层以供以后(更深入)使用?
感谢阅读(也许还有帮助)!
答案 0 :(得分:1)
如果您要阅读自定义数据。有两个关于构建自己的阅读器的教程。 https://cntk.ai/pythondocs/manuals.html
关于将网络的部分 - here is a link克隆到StackOverflow上另一个具有示例代码的帖子