Keras reports TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

前端 未结 2 1104
小蘑菇
小蘑菇 2020-12-11 02:59

I\'m a beginner in Keras and just write a toy example. It reports a TypeError. The code and error are as follows:

Code:



        
相关标签:
2条回答
  • 2020-12-11 03:49

    I think @today's answer is very clear. However, not complete. The key thing here is that, if your input doesn't contain num_features, you have to make a Embedding layer next to the input.

    So if you use:

    inputs = keras.Input(shape=(3,))
    embedding = Embedding(voc_size, embed_dim, ..)
    X = embedding(inputs)
    

    it also works.

    0 讨论(0)
  • 2020-12-11 03:59

    The input to a RNN layer would have a shape of (num_timesteps, num_features), i.e. each sample consists of num_timesteps timesteps where each timestep is a vector of length num_features. Further, the number of timesteps (i.e. num_timesteps) could be variable or unknown (i.e. None) but the number of features (i.e. num_features) should be fixed and specified from the beginning. Therefore, you need to change the shape of Input layer to be consistent with the RNN layer. For example:

    inputs = keras.Input(shape=(None, 3))  # variable number of timesteps each with length 3
    inputs = keras.Input(shape=(4, 3))     # 4 timesteps each with length 3
    inputs = keras.Input(shape=(4, None))  # this is WRONG! you can't do this. Number of features must be fixed
    

    Then, you also need to change the shape of input data (i.e. data) as well to be consistent with the input shape you have specified (i.e. it must have a shape of (num_samples, num_timesteps, num_features)).

    As a side note, you could define the RNN layer more simply by using the SimpleRNN layer directly:

    label = keras.layers.SimpleRNN(units=5, activation='softmax')(inputs)
    
    0 讨论(0)
提交回复
热议问题