Странное поведение измерения: нужно как измерение 2, так и 3, не зная, почему - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь преобразовать простую модель в TFLite и столкнуться со следующей проблемой с измерениями.

Я уже пытался использовать perm = [1,0] и perm = [0,2,1] первый вызовет ошибку, требующую 3 измерения, а второй вызовет ошибку, требующую 2 измерения.

import tensorflow as tf

captions = tf.keras.layers.Input(shape=[5,1024], name='captions')
cap_i = tf.keras.layers.Lambda(lambda q: q[0][:5,:])([captions])
cap_iT = tf.keras.layers.Lambda(lambda query:tf.transpose(query, 
perm=[0,2,1]))(cap_i)
model = tf.keras.models.Model(inputs=[captions], outputs=[cap_iT])
model.save('my_model.hd5')
converter = 
tf.lite.TFLiteConverter.from_keras_model_file('my_model.hd5')
tflite_model = converter.convert()
open("converted_modelfile.tflite", "wb").write(tflite_model)

ValueError: Размер должен быть 2, но равен 3 для «lambda_1 / transpose»(op: 'Transpose') с входными формами: [5,1024], [3].

1 Ответ

0 голосов
/ 20 сентября 2019

Возможно, вы получаете ошибку в двух разных местах.

Вы отбрасываете размер пакета в первом Lambda с помощью q[0].Вы не должны этого делать, вам понадобится размер пакета в конце модели Keras (вероятно, местоположение другой ошибки).Хотя вы передаете [captions] внутри списка, он, вероятно, автоматически получает элемент внутри списка, потому что это единственный тензор.

Сообщение в вашем вопросе обязательно находится во втором Lambda, где у вас есть тензор с двумя измерениями [5,1024] (потому что вы выбросили размер пакета в первом Lambda), и вы пытаетесьпереставить 3 измерения с [0,2,1].

...