如何解决重塑输出尺寸以适合Keras模型
我有一个Keras模型,用于猫数据集的关键点检测。对于每个彩色图像,都有3个关键点以及相应的3个热图。 模型的输入图像是64、64、3 相应的输出的形状为3,64,64。
我正在通过以下功能准备裁剪和调整大小的热图:
def crop_heatmaps():
dataset['cropped_heatmaps'] = []
for i in range(len(dataset['heatmaps'])):
cropped_heats = []
heatmaps = dataset['heatmaps'][i]
bb = dataset['bbs'][i]
x1 = max(bb[0] - 20,0) #avoid negative coordinates of the extended bounding Box
y1 = max(bb[1] - 20,0)
x2 = bb[2] + 20
y2 = bb[3] + 20
for heat in heatmaps:
cropped_heat = heat[y1:y2,x1:x2]
resized_heat = cv2.resize(cropped_heat,(64,64))
#plt.imshow(resized_heat)
cropped_heats.append(resized_heat)
cropped_heatmaps = np.array(cropped_heats)
dataset['cropped_heatmaps'].append(cropped_heats)
我创建了2个用于输入和输出的dataimageGenerator,并将它们压缩在一起。
train_generator = zip(img_train_generator,heatmaps_train_generator)
history = model.fit((pair for pair in train_generator),epochs=30,validation_data=(),verbose=1
)
拟合模型时出现此错误:不兼容的形状:[128,3,64]与[128,64]
模型如下:
input_1(InputLayer)[[None,64,64,3)] 0
block1_conv1(Conv2D)(无,64,64,64)1792
block1_conv2(Conv2D)(无,64、64、64)36928
block1_pool(MaxPooling2D)(无,32,32,64)0
block2_conv1(Conv2D)(无,32、32、128)73856
block2_conv2(Conv2D)(无,32、32、128)147584
bottleneck_1(Conv2D)(无,32、32、160)5243040
bottleneck_2(Conv2D)(无,32、32、160)25760
upsample_1(Conv2DTranspose)(无,64,64,3)1920
我尝试过
np.reshape(cropped_heatmaps,3))
但是它不起作用。如何重塑热图以获得64、64、3? (3个频道)
解决方法
如果要更改轴1和2 ip,可以使用: np.moveaxis(x,1,2)
示例:
import numpy as np
x = np.zeros((128,64,3,32))
print(x.shape)
y = np.moveaxis(x,1,2)
print(y.shape)
出局:
(128,32)
(128,32)
>>>
具有(64,3)至(3,64)
可以使用:
import numpy as np
x = np.zeros((64,3))
print(x.shape)
y = np.moveaxis(x,-1,0)
print(y.shape)
出局:
(64,3)
(3,64)
>>>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。