4

I'm training a model with a generator and I'm getting this Warning from Tensorflow, although I can train the model without errors, I want to fix this or at least understand why it happens.

My data from the generator have this shapes:

for x, y in model_generator(): # x[0] and x[1] are the inputs, y is the output
    print(x[0].shape, x[1].shape, y.shape)

# (20,)(20,)(20,17772) 
# 17772 --> Number of unique words in my datatset
# 20 --> Number of words per example (per sentence)

This is my model:

Model: "functional_1"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_1 (InputLayer)            [(None, 20)]         0                                            
__________________________________________________________________________________________________
input_2 (InputLayer)            [(None, 20)]         0                                            
__________________________________________________________________________________________________
embedding (Embedding)           (None, 20, 50)       890850      input_1[0][0]                    
__________________________________________________________________________________________________
embedding_1 (Embedding)         (None, 20, 50)       890850      input_2[0][0]                    
__________________________________________________________________________________________________
lstm (LSTM)                     [(None, 64), (None,  29440       embedding[0][0]                  
__________________________________________________________________________________________________
lstm_1 (LSTM)                   (None, 20, 64)       29440       embedding_1[0][0]                
                                                                 lstm[0][1]                       
                                                                 lstm[0][2]                       
__________________________________________________________________________________________________
time_distributed (TimeDistribut (None, 20, 17772)    1155180     lstm_1[0][0]                     
==================================================================================================
Total params: 2,995,760
Trainable params: 1,214,060
Non-trainable params: 1,781,700
__________________________________________________________________________________________________
None

And this are the warnings I'm getting when running the model:

WARNING:tensorflow:Model was constructed with shape (None, 20) for input Tensor("input_1:0", shape=(None, 20), dtype=float32), but it was called on an input with incompatible shape (None, 1).
WARNING:tensorflow:Model was constructed with shape (None, 20) for input Tensor("input_2:0", shape=(None, 20), dtype=float32), but it was called on an input with incompatible shape (None, 1).
WARNING:tensorflow:Model was constructed with shape (None, 20) for input Tensor("input_1:0", shape=(None, 20), dtype=float32), but it was called on an input with incompatible shape (None, 1).
WARNING:tensorflow:Model was constructed with shape (None, 20) for input Tensor("input_2:0", shape=(None, 20), dtype=float32), but it was called on an input with incompatible shape (None, 1).

I don't understand why I get this, the shape of the input is (20,) so should be correct, any suggestions?

EDIT

Generator:

def model_generator():
    for index, output in enumerate(training_decoder_output):
        for i in range(size):
            yield ([training_encoder_input[size*index+i], training_decoder_input[size*index+i]], output[i])

# Generator, returns inputs and ouput one by one when calling 
# (I saved the outputs in chunks on disk so that's why I iterate over it in that way)

Call to model.fit():

model.fit(model_generator(), epochs=5)

Sample of training_encoder_input:

print(training_encoder_input[:5])

[[   3 1516   10 3355 2798    1 9105    1 9106    4  162    1  411    1
  9107 3356  612    1 9108    1]
 [   0    0    0    0    0    0    0    0    0    0    0    2 9109 2799
  5632   29 1187    2  157  275]
 [   0   54 5633 5634    1  412 4199   12 9110 5633 5634   27  443  134
  1516    7    6 4200 1280    1]
 [  23 9112  816   11 9113   33  184 9114  816    1 9115   42    3    2
    57    5 2120    3  185    1]
 [   0    0    0    0    0    0   15  301 9116    3 3357    1 9117    1
    67 5635    4  110 5635    1]]
4
  • Con you share your generator, and your call to model.fit ? Commented Oct 9, 2020 at 7:11
  • Done @Lescurel I have already edited my question Commented Oct 9, 2020 at 7:27
  • Can you share s sample of your training_encoder_input ? Commented Oct 9, 2020 at 7:34
  • Added! I added the first five elements as an example, can you figure out what's going on with the warning? Commented Oct 9, 2020 at 7:40

1 Answer 1

6

The shape of your input should be like:

x[0].shape => (1,20,) # where 1 is batch size. 

In model None is batch size so this particular dimension should also appear in your x data. So, you need to update your generate as:

def model_generator():
for index, output in enumerate(training_decoder_output):
    for i in range(size):
        yield ([np.expand_dims(training_encoder_input[size*index+i], axis=0), np.expand_dims(training_decoder_input[size*index+i]], axis=0), np.expand_dims(output[i], axis=0))

If you have more than one batch size, you create a list/array of elements as (bs,20,) where bs is batch size.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.