Ошибка типа: объект ‘Tensor’ не вызывается в функции вызова с массивом numpy

#python #tensorflow

#python #tensorflow

Вопрос:

 class RoastBot(tf.keras.Model):
    def __init__(self, vocab_size, embedding_dim, batch_size, conv_arr, rnn_arr):
        super(RoastBot, self).__init__()
        self.img_input = tf.keras.layers.Input(batch_input_shape=[batch_size,None,None,3])
        self.text_input = tf.keras.layers.Embedding(vocab_size, embedding_dim, batch_input_shape=[batch_size,None])
        
        
        self.vocab = tf.keras.layers.Dense(vocab_size)
    
    def call(self, inputs):
        img = np.array(inputs['input_1'])
        print(img)
        text = tf.convert_to_tensor(inputs['input_2'])
        x = self.img_input(img)
        x_prime = self.text_input(text)
        
        
        x = tf.keras.backend.flatten(x)
        x = tf.keras.backend.concatenate((x,x_prime))
        return self.vocab(x)
  

В настоящее время у меня возникли проблемы с model.fit, поэтому я занимаюсь некоторой отладкой. Моя модель принимает в качестве входных данных изображение и последовательность целых чисел в качестве двух отдельных входных данных:

 input_dict = {}
input_dict['input_1'] = img
input_dict['input_2'] = tokenizer.texts_to_sequences([u'You look like '])
print(img.shape)
model(input_dict)
  

Но в call(), строке x = self.img_input(img) , я получаю TypeError, что тензор не может быть вызван. Я начинаю думать, что входной слой просто не вызывается при создании пользовательской модели, я не прав? В чем здесь проблема?

Ответ №1:

Да, я разобрался с проблемой. Похоже, мое предположение было правильным, проблема заключается в том, что в качестве фактического ввода используется входной слой.

Вместо этого используйте любой следующий слой, в моем случае слой Conv2D, и обязательно установите batch_input_shape или input_shape