【发布时间】:2021-08-09 15:19:44
【问题描述】:
我目前正在研究视觉问答主题。 我做了一个模型如下:
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_3 (InputLayer) [(None, 224, 224, 3) 0
__________________________________________________________________________________________________
block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 input_3[0][0]
__________________________________________________________________________________________________
block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 block1_conv1[0][0]
__________________________________________________________________________________________________
block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 block1_conv2[0][0]
__________________________________________________________________________________________________
block2_conv1 (Conv2D) (None, 112, 112, 128 73856 block1_pool[0][0]
__________________________________________________________________________________________________
block2_conv2 (Conv2D) (None, 112, 112, 128 147584 block2_conv1[0][0]
__________________________________________________________________________________________________
block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 block2_conv2[0][0]
__________________________________________________________________________________________________
block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 block2_pool[0][0]
__________________________________________________________________________________________________
block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 block3_conv1[0][0]
__________________________________________________________________________________________________
block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 block3_conv2[0][0]
__________________________________________________________________________________________________
block3_conv4 (Conv2D) (None, 56, 56, 256) 590080 block3_conv3[0][0]
__________________________________________________________________________________________________
block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 block3_conv4[0][0]
__________________________________________________________________________________________________
block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 block3_pool[0][0]
__________________________________________________________________________________________________
block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 block4_conv1[0][0]
__________________________________________________________________________________________________
block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 block4_conv2[0][0]
__________________________________________________________________________________________________
block4_conv4 (Conv2D) (None, 28, 28, 512) 2359808 block4_conv3[0][0]
__________________________________________________________________________________________________
block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 block4_conv4[0][0]
__________________________________________________________________________________________________
block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 block4_pool[0][0]
__________________________________________________________________________________________________
block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 block5_conv1[0][0]
__________________________________________________________________________________________________
block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 block5_conv2[0][0]
__________________________________________________________________________________________________
block5_conv4 (Conv2D) (None, 14, 14, 512) 2359808 block5_conv3[0][0]
__________________________________________________________________________________________________
block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 block5_conv4[0][0]
__________________________________________________________________________________________________
flatten_1 (Flatten) (None, 25088) 0 block5_pool[0][0]
__________________________________________________________________________________________________
input_4 (InputLayer) [(None, 20)] 0
__________________________________________________________________________________________________
repeat_vector_1 (RepeatVector) (None, 20, 25088) 0 flatten_1[0][0]
__________________________________________________________________________________________________
embedding_1 (Embedding) (None, 20, 50) 901900 input_4[0][0]
__________________________________________________________________________________________________
concatenate_1 (Concatenate) (None, 20, 25138) 0 repeat_vector_1[0][0]
embedding_1[0][0]
__________________________________________________________________________________________________
bidirectional_1 (Bidirectional) (None, 20, 50) 5032800 concatenate_1[0][0]
__________________________________________________________________________________________________
global_max_pooling1d_1 (GlobalM (None, 50) 0 bidirectional_1[0][0]
__________________________________________________________________________________________________
dense_1 (Dense) (None, 18037) 919887 global_max_pooling1d_1[0][0]
==================================================================================================
你可以在这里找到关于 VQA 的原始论文:http://arxiv.org/pdf/1512.02167.pdf
总结一下,我有一个有 2 个输入的模型
- 一个预先训练的 VGG19,可以拍摄图像
- 和一个接受标记化问题的嵌入式层。
作为输出,我们有一个带有最终密集层的双向 LSTM,可以给出问题的答案。
训练数据如下:
img_path question answer
103 train2014/COCO_train2014_000000262171.jpg How many people are on the boat? 5
104 train2014/COCO_train2014_000000262171.jpg What color are the leaves? green
105 train2014/COCO_train2014_000000262171.jpg What type of watercraft is that? raft
131 train2014/COCO_train2014_000000262180.jpg What is the fruit? banana
132 train2014/COCO_train2014_000000262180.jpg Is this a good dessert?
我的问题是这个:我无法对内存中的所有图像进行充电,我想知道是否可以使用生成器来拟合模型以动态生成图像 + 标记化问题?
我想做类似的事情:
h = model_VQA.fit([X_train_img_generator, X_train_question], y_train_answer, epochs = 15, batch_size = 32)
其中:X_train_question 是标记化的问题,X_train_img_generator 是图像生成器。
--> 但它不起作用,有没有办法正确处理这个问题?
--------- 2021 年 6 月 2 日编辑
好的,我现在更新了我的问题的答案,并更正了一些关于输入图像大小现在为 480x640x3 的问题
__________________________________________________________________________________________________
Layer (type) Output Shape Param # Connected to
==================================================================================================
input_8 (InputLayer) [(None, 480, 640, 3) 0
__________________________________________________________________________________________________
block1_conv1 (Conv2D) (None, 480, 640, 64) 1792 input_8[0][0]
__________________________________________________________________________________________________
block1_conv2 (Conv2D) (None, 480, 640, 64) 36928 block1_conv1[0][0]
__________________________________________________________________________________________________
block1_pool (MaxPooling2D) (None, 240, 320, 64) 0 block1_conv2[0][0]
__________________________________________________________________________________________________
block2_conv1 (Conv2D) (None, 240, 320, 128 73856 block1_pool[0][0]
__________________________________________________________________________________________________
block2_conv2 (Conv2D) (None, 240, 320, 128 147584 block2_conv1[0][0]
__________________________________________________________________________________________________
block2_pool (MaxPooling2D) (None, 120, 160, 128 0 block2_conv2[0][0]
__________________________________________________________________________________________________
block3_conv1 (Conv2D) (None, 120, 160, 256 295168 block2_pool[0][0]
__________________________________________________________________________________________________
block3_conv2 (Conv2D) (None, 120, 160, 256 590080 block3_conv1[0][0]
__________________________________________________________________________________________________
block3_conv3 (Conv2D) (None, 120, 160, 256 590080 block3_conv2[0][0]
__________________________________________________________________________________________________
block3_conv4 (Conv2D) (None, 120, 160, 256 590080 block3_conv3[0][0]
__________________________________________________________________________________________________
block3_pool (MaxPooling2D) (None, 60, 80, 256) 0 block3_conv4[0][0]
__________________________________________________________________________________________________
block4_conv1 (Conv2D) (None, 60, 80, 512) 1180160 block3_pool[0][0]
__________________________________________________________________________________________________
block4_conv2 (Conv2D) (None, 60, 80, 512) 2359808 block4_conv1[0][0]
__________________________________________________________________________________________________
block4_conv3 (Conv2D) (None, 60, 80, 512) 2359808 block4_conv2[0][0]
__________________________________________________________________________________________________
block4_conv4 (Conv2D) (None, 60, 80, 512) 2359808 block4_conv3[0][0]
__________________________________________________________________________________________________
block4_pool (MaxPooling2D) (None, 30, 40, 512) 0 block4_conv4[0][0]
__________________________________________________________________________________________________
block5_conv1 (Conv2D) (None, 30, 40, 512) 2359808 block4_pool[0][0]
__________________________________________________________________________________________________
block5_conv2 (Conv2D) (None, 30, 40, 512) 2359808 block5_conv1[0][0]
__________________________________________________________________________________________________
block5_conv3 (Conv2D) (None, 30, 40, 512) 2359808 block5_conv2[0][0]
__________________________________________________________________________________________________
block5_conv4 (Conv2D) (None, 30, 40, 512) 2359808 block5_conv3[0][0]
__________________________________________________________________________________________________
block5_pool (MaxPooling2D) (None, 15, 20, 512) 0 block5_conv4[0][0]
__________________________________________________________________________________________________
flatten_7 (Flatten) (None, 153600) 0 block5_pool[0][0]
__________________________________________________________________________________________________
input_quest (InputLayer) [(None, None)] 0
__________________________________________________________________________________________________
repeat_vector_7 (RepeatVector) (None, 20, 153600) 0 flatten_7[0][0]
__________________________________________________________________________________________________
embedding_7 (Embedding) (None, 20, 50) 540700 input_quest[0][0]
__________________________________________________________________________________________________
concatenate_7 (Concatenate) (None, 20, 153650) 0 repeat_vector_7[0][0]
embedding_7[0][0]
__________________________________________________________________________________________________
bidirectional_7 (Bidirectional) (None, 20, 22) 13522256 concatenate_7[0][0]
__________________________________________________________________________________________________
global_max_pooling1d_7 (GlobalM (None, 22) 0 bidirectional_7[0][0]
__________________________________________________________________________________________________
dense_7 (Dense) (None, 7465) 171695 global_max_pooling1d_7[0][0]
==================================================================================================
数据集为:
def load(file_path):
img = tf.io.read_file(file_path)
img = tf.image.decode_png(img, channels=3)
img = tf.image.convert_image_dtype(img, tf.float32)
img = preprocess_input(img)
#img = tf.image.resize(img, size=(224, 224))
img /= 255.
img = tf.expand_dims(img, axis = 0)
return img
x1 = tf.data.Dataset.from_tensor_slices(X_img_train).map(lambda xx: load(xx))
x2 = tf.data.Dataset.from_tensor_slices(X_train_rnn_pad)
y = tf.data.Dataset.from_tensor_slices(answer_tr)
dataset = tf.data.Dataset.zip(((x1, x2), y))
h = model_VQA.fit(x = dataset, batch_size = 32, shuffle = True, epochs = 15)
但我收到以下错误:
ValueError: Dimension 0 in both shapes must be equal, but are 1 and 20. Shapes are [1,20] and [20,1]. for '{{node model_8/concatenate_7/concat}} = ConcatV2[N=2, T=DT_FLOAT, Tidx=DT_INT32](model_8/repeat_vector_7/Tile, model_8/embedding_7/embedding_lookup/Identity_1, model_8/concatenate_7/concat/axis)' with input shapes: [1,20,153600], [20,1,50], [] and with computed input tensors: input[2] = <2>.
我猜这与嵌入部分的输入形状有关,但我没有错过什么
我的输入数据形状是
X_train_rnn_pad = (53607,20), 和 answer_tr = (53607, 7465)
【问题讨论】:
标签: tensorflow keras input