Я пытаюсь повторить код из этого 1 . Используется набор данных flickr 8k, и у каждого изображения есть 5 подписей, но здесь я использую 3 вместо 5.
Мой caption_model это: . Лучшее представление:
Я использую следующие объекты:
- training_captions: Это дикт с ключами 8k +, и каждый ключ имеет список из 3 заголовков.
- images: это также дикт с ключами 8k +, и каждый ключ отображается в массив, имеющий форму (2048,)
- vocab_size: это размер списка уникальных слов, число которых в данном случае превышает пороговое значение, равное 10. В этом случае длина списка равна 2035.
- wordtoix: где каждое слово отображается в целое число.
- max_length : Максимальная длина заголовка. В данном случае это 74, и с помощью этого мы добавляем каждый заголовок к этой длине.
Теперь я использую это для создания генератора,
def data_generator(descriptions, photos, wordtoix, max_length, num_photos_per_batch):
X1, X2, y = list(), list(), list()
n=0
# loop for ever over images
while 1:
for key, desc_list in descriptions.items():
n+=1
# retrieve the photo feature
photo = photos[key]
for desc in desc_list:
# encode the sequence
seq = [wordtoix[word] for word in desc.split(' ') if word in wordtoix]
# split one sequence into multiple X, y pairs
for i in range(1, len(seq)):
# split into input and output pair
in_seq, out_seq = seq[:i], seq[i]
# pad input sequence
in_seq = pad_sequences([in_seq], maxlen=max_length)[0]
# encode output sequence
out_seq = to_categorical([out_seq], num_classes=vocab_size)[0]
# store
X1.append(photo)
X2.append(in_seq)
y.append(out_seq)
# yield the batch data
if n==num_photos_per_batch:
print(array([[array(X1), array(X2)], array(y)]).shape)
yield [[array(X1), array(X2)], array(y)]
X1, X2, y = list(), list(), list()
n=0
Когда я пытаюсь сделать
for i in tqdm(range(EPOCHS*2)):
generator= data_generator(training_captions, images, wordtoix, max_length, number_pics_per_bath)
caption_model.fit_generator(generator, epochs=1, steps_per_epoch=steps, verbose=1)
Я получаю ошибку
* 1 034 *
Я все еще учусь, поэтому я не могу понять, в чем проблема, что я чувствую в том, что когда я даю результат в функции генератора, он возвращает данные в форме, которую модель не принимает, но я не знаю, как ее решить или какие изменения внести.