使用批量标准化时更改模型输入大小并加载保存的模型权重

时间:2018-06-08 22:59:15

标签: python machine-learning keras conv-neural-network

我正在看这个github project

特别是“fps_convert.py”文件。你不必看它来回答这个问题。

这是一个使用Keras编写的卷积网络,有一个下载预训练模型的权重的链接,以避免需要花费很长时间训练它。

我设法让它工作,但模型是用特定的输入大小定义的。如果我改变输入大小,那么我就不能再加载预先训练过的模型的保存权重:

model = get_unet_2((6, height, width)) # creates the model 
model.load_weights("./../model_weights/weights_unet2_finetune_youtube_100epochs.hdf5") # throws error

异常:

ValueError: Dimension 0 in both shapes must be equal, but are 192 and 384. Shapes are [192] and [384]. for 'Assign_2' (op: 'Assign') with input shapes: [192], [384].

他们在自述文件中有关于此的说明:

*Note that the weights are trained using the architecture defined in FI_unet.py/get_unet_2(), which requires input of shape=(6, 128, 384), due to the use of Batch Normalization (probably could do without that)

我不明白的是,批量标准化是如何相关的?我的理解是权重(基本上是卷积掩码)不依赖于初始输入层的大小,我不明白为什么批量规范化会改变它。

0 个答案:

没有答案