首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改VGG16应用程序的输入张量形状

更改VGG16应用程序的输入张量形状
EN

Stack Overflow用户
提问于 2017-01-28 05:10:48
回答 3查看 13.6K关注 0票数 3

我想将形状(160,320,3)的图像馈送到

代码语言:javascript
运行
复制
 VGG16(input_tensor=input_tensor, include_top=False)   

如何包含将图像重塑为VGG16模型所期望的形状的层,即(224,224,3)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-28 08:51:40

VGG16模型本身只是固定的层序列和固定的卷积核大小等的一组权重,这并不意味着这些卷积核不能应用于其他大小的图像。

例如,在您的案例中:

代码语言:javascript
运行
复制
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)

根据here的说法,最小图像大小可以是48x48x3,超过这个值的任何值都可以。

现在,原始权重确实是在224,224,3形状的图像上学习的,但过滤器权重对于新图像集的新任务来说是非常好的起点。您确实需要重新训练网络,但网络会非常快地收敛。这是迁移学习的基础。

票数 18
EN

Stack Overflow用户

发布于 2018-02-12 21:23:10

您需要做两件事:

  1. 通过为图像宽度和高度定义None来显式声明输入形状具有可变大小的输入。
  2. 不使用flatten(),因为它依赖于固定的输入形状。取而代之的是使用GlobalMaxPooling,它不仅可以进行自适应池化,还可以使FC的输入张量扁平化。

我希望这能帮助你实现你想要的东西。

票数 0
EN

Stack Overflow用户

发布于 2019-09-25 21:49:34

可以使用Opencv库的resize()函数。

代码语言:javascript
运行
复制
 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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41903051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档