简单的问题 - 说我有一个360px到240px的图像。而不是将我(已经很小)的图像裁剪为240x240,我可以创建一个在整个矩形上运行的卷积神经网络吗?特别是使用Convolution2D
图层。
我问,因为我读过CNNs的每篇论文看起来都有方形输入大小,所以我想知道我建议的是否合适,如果是的话,我可能会遇到哪些不利之处。所有设置(如border_mode='same'
)的工作方式是否相同?
感谢。
答案 0 :(得分:2)
矩形图像没有问题......对于方形图像,一切都能正常工作。
答案 1 :(得分:1)
是
但为什么不试一试呢
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy as np
np.random.seed(1234)
from keras.layers import Input
from keras.layers.convolutional import Convolution2D
from keras.models import Model
print("Building Model...")
inp = Input(shape=(1,None,None))
output = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(inp)
model_network = Model(input=inp, output=output)
w = np.asarray([
[[[
[0,0,0],
[0,2,0],
[0,0,0]
]]]
])
input_mat = np.asarray([
[[
[1.,2.,3.,10.],
[4.,5.,6.,11.],
[7.,8.,9.,12.]
]]
])
model_network.layers[1].set_weights(w)
print("Weights after change:")
print(model_network.layers[1].get_weights())
print("Input:")
print(input_mat)
print("Output:")
print(model_network.predict(input_mat))
构建样本模型
inp = Input(shape=(1,None,None))
output = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(inp)
model_network = Model(input=inp, output=output)
给它一些权重并设置它们以便你可以预先输出,比如说:
w = np.asarray([
[[[
[0,0,0],
[0,2,0],
[0,0,0]
]]]
])
model_network.layers[1].set_weights(w)
因此卷积只会使你的输入加倍。
给它你的矩形图像:
input_mat = np.asarray([
[[
[1.,2.,3.,10.],
[4.,5.,6.,11.],
[7.,8.,9.,12.]
]]
])
检查输出是否有效
print("Output:")
print(model_network.predict(input_mat))
示例输出:
Using Theano backend.
Building Model...
Weights after change:
[array([[[[ 0., 0., 0.],
[ 0., 2., 0.],
[ 0., 0., 0.]]]], dtype=float32)]
Input:
[[[[ 1. 2. 3. 10.]
[ 4. 5. 6. 11.]
[ 7. 8. 9. 12.]]]]
Output:
[[[[ 2. 4. 6. 20.]
[ 8. 10. 12. 22.]
[ 14. 16. 18. 24.]]]]
原始post并进行了一些更改