Keras Berichte TypeError: unsupported operand type(s) for +: ‚NoneType‘ and ‚int‘

Ich bin ein Anfänger in Keras und Schreibe nur einem Spielzeug Beispiel. Es berichtet eine TypeError. Den code und die Fehler sind wie folgt:

Code:

inputs = keras.Input(shape=(3, ))

cell = keras.layers.SimpleRNNCell(units=5, activation='softmax')
label = keras.layers.RNN(cell)(inputs)

model = keras.models.Model(inputs=inputs, outputs=label)
model.compile(optimizer='rmsprop',
              loss='mae',
              metrics=['acc'])

data = np.array([[1, 2, 3], [3, 4, 5]])
labels = np.array([1, 2])
model.fit(x=data, y=labels)

Fehler:

Traceback (most recent call last):
    File "/Users/david/Documents/code/python/Tensorflow/test.py", line 27, in <module>
        run()
    File "/Users/david/Documents/code/python/Tensorflow/test.py", line 21, in run
        label = keras.layers.RNN(cell)(inputs)
    File "/Users/david/anaconda3/lib/python3.6/site-packages/tensorflow/python/keras/layers/recurrent.py", line 619, in __call__
...
    File "/Users/david/anaconda3/lib/python3.6/site-packages/tensorflow/python/ops/init_ops.py", line 473, in __call__
        scale /= max(1., (fan_in + fan_out) / 2.)
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

Also, wie kann ich damit umgehen?

InformationsquelleAutor david | 2018-11-27

 

2 Replies
  1. 5

    Den Eingang zu einer RNN-Ebene haben würde, die Form (num_timesteps, num_features), D. H. jede Stichprobe besteht aus num_timesteps Zeitintervallen, wo jedem Zeitschritt ist ein Vektor der Länge num_features. Weitere, die Anzahl von Zeitintervallen (d.h. num_timesteps) könnte variabel oder unbekannt ist (d.h. None), aber die Anzahl der Funktionen (D. H. num_features) behoben werden sollten und von Anfang an festgelegt. Daher müssen Sie ändern die Form der Input-Schicht werden im Einklang mit der RNN-Schicht. Zum Beispiel:

    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

    Dann müssen Sie auch ändern Sie die Form der Eingabedaten (d.h. data) als auch auf Konsistenz mit der input-Form, die Sie angegeben haben (d.h. es muss eine Form von (num_samples, num_timesteps, num_features)).

    Als Seite beachten, können Sie definieren die RNN-Schicht mehr, indem einfach die SimpleRNN Schicht direkt:

    label = keras.layers.SimpleRNN(units=5, activation='softmax')(inputs)
    • Vielen Dank für deine Antwort!
  2. 0

    Ich glaube, @die heutige Antwort ist ganz klar. Jedoch nicht vollständig. Das wichtigste hier ist, dass, wenn Sie Ihre Eingabe nicht enthalten num_features haben Sie, um eine Embedding Schicht neben dem Eingang.

    Also, wenn Sie verwenden:

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

    funktioniert es auch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.