我有两个巨大的网格(输入和输出),它们表示同一区域的某些空间数据。我希望通过将输入网格中感兴趣像素周围的小部分输入神经网络,来逐像素生成输出。
训练和评估CNN的简单方法是分别提取各个部分,并将这些部分输入到fit()函数中。但如果CNN操作的子网格是例如输入的256×256区域,那么每个epoch我将复制每个数据点65536(!!!)次。
那么,有没有办法让karas直接使用更大数据结构的子部分进行训练呢?
对我来说,这听起来有点像在数据系列的连续部分上训练RNN,而不是分别复制每个部分。
性能考虑主要是在评估模型的情况下。我想使用这个模型生成一个巨大的地理区域(丹麦)的输出网格,分辨率为12.5厘米
回答:
在我看来,你似乎在寻找一个全卷积网络(FCN)。
通过仅使用随输入大小缩放的层(特别是摒弃密集层的使用),FCN能够生成一个输出,其空间范围与输入成比例增长——通常,输出与输入具有相同的分辨率,就像你的情况一样。
如果你的输入非常大,你仍然可以用子图像训练FCN。然后在推理时,你可以
- 在整个图像上运行网络:确实,有时输入在训练期间太大而无法批处理,但可以在推理时单独输入。
- 或者将输入分割成子图像,并将结果拼接回来。在这种情况下,我可能会使用重叠的瓦片,以避免潜在的边界效应。