我正在看这个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)
我不明白的是,批量标准化是如何相关的?我的理解是权重(基本上是卷积掩码)不依赖于初始输入层的大小,我不明白为什么批量规范化会改变它。