Keras 更改VGG16应用程序的输入张量形状
我想将形状(160320,3)的图像馈送到Keras 更改VGG16应用程序的输入张量形状,keras,keras-layer,Keras,Keras Layer,我想将形状(160320,3)的图像馈送到 我怎样才能包括一个将图像重塑为VGG16模型所期望的形状的层,即(224,3)?VGG16模型本身只是固定层序列和固定卷积内核大小等的一组权重。这并不意味着这些卷积内核不能应用于其他大小的图像 例如,在您的案例中: from keras.models import Model from keras.layers import Dense,Flatten from keras.applications import vgg16 from keras im
我怎样才能包括一个将图像重塑为VGG16模型所期望的形状的层,即(224,3)?
VGG16
模型本身只是固定层序列和固定卷积内核大小等的一组权重。这并不意味着这些卷积内核不能应用于其他大小的图像
例如,在您的案例中:
from keras.models import Model
from keras.layers import Dense,Flatten
from keras.applications import vgg16
from keras import backend as K
model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(160,320,3))
model.summary(line_length=150)
flatten = Flatten()
new_layer2 = Dense(10, activation='softmax', name='my_dense_2')
inp2 = model.input
out2 = new_layer2(flatten(model.output))
model2 = Model(inp2, out2)
model2.summary(line_length=150)
根据最小图像大小可以是48x48x3
以上任何值都可以
现在,在
224224,3
形状的图像上学习原始权重是正确的,但是过滤器权重对于具有新图像集的新任务来说是非常好的起点。您确实需要重新训练网络,但网络会很快收敛。这是迁移学习的基础 您需要做两件事:
import cv2
width = int(224)
height = int(224)
dim = (width, height)
'''images contains original dimension image array'''
resized_images=[]
for i in range(0,images.shape[0]):
resized = cv2.resize(images[i], dim, interpolation = cv2.INTER_AREA)
resized_images.append(resized)
这种方法人为地增加了计算成本,但对学习能力没有太多或任何好处。据我所知,插值像素不会增加任何值。
import cv2
width = int(224)
height = int(224)
dim = (width, height)
'''images contains original dimension image array'''
resized_images=[]
for i in range(0,images.shape[0]):
resized = cv2.resize(images[i], dim, interpolation = cv2.INTER_AREA)
resized_images.append(resized)