2017-05-03 16 views
2

Ich versuche derzeit, die Dependency Sensitive Convolutional Neural Network für die Modellierung von Dokumenten von Rui Zhang in Keras zu implementieren. Für mich ist dies das erste Netzwerk, das in Keras implementiert wurde, also habe ich ein paar Fragen gestellt.Problem mit TimeDistributed LSTMs

Das Netzwerk sieht wie folgt aus:

DSCNN

Ich denke, die Umsetzung schon ziemlich weit, aber es ist ein großes Problem mit dem Modell der Initialisierung. Ich habe einen Kern erstellt: https://gist.github.com/pexmar/cec8dfdfe46b24ea7d1765f398df8d9d

Der Fehler, der der folgenden auftritt:

Traceback (most recent call last): 
    File "/Users/peter/Masterarbeit/python-projects/dscnn-keras/classify.py", line 64, in <module> 
    model = create_model(embeddings, max_sentences_per_doc, max_sentence_len, kernel_size=[3, 4, 5], filters=100) 
    File "/Users/peter/Masterarbeit/python-projects/dscnn-keras/model.py", line 38, in create_model 
    sentence_modeling = [shared_sentence_lstm(sentence_modeling[i]) for i in range(max_sentences_per_doc)] 
    File "/Users/peter/Masterarbeit/python-projects/dscnn-keras/model.py", line 38, in <listcomp> 
    sentence_modeling = [shared_sentence_lstm(sentence_modeling[i]) for i in range(max_sentences_per_doc)] 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/engine/topology.py", line 528, in __call__ 
    self.build(input_shapes[0]) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/layers/wrappers.py", line 104, in build 
    self.layer.build(child_input_shape) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/layers/recurrent.py", line 959, in build 
    self.input_dim = input_shape[2] 
IndexError: tuple index out of range 

Weißt du, wo mein Fehler ist?

Sehen Sie andere Fehler? Wenn ich die fehlerhafte Zeile aus kommentieren, bekomme ich folgende Fehlermeldung:

Traceback (most recent call last): 
    File "/Users/peter/Masterarbeit/python-projects/dscnn-keras/classify.py", line 64, in <module> 
    model = create_model(embeddings, max_sentences_per_doc, max_sentence_len, kernel_size=[3, 4, 5], filters=100) 
    File "/Users/peter/Masterarbeit/python-projects/dscnn-keras/model.py", line 43, in create_model 
    sentence_modeling = [shared_sentence_lstm_2(sentence_modeling[i]) for i in range(max_sentences_per_doc)] 
    File "/Users/peter/Masterarbeit/python-projects/dscnn-keras/model.py", line 43, in <listcomp> 
    sentence_modeling = [shared_sentence_lstm_2(sentence_modeling[i]) for i in range(max_sentences_per_doc)] 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/layers/recurrent.py", line 252, in __call__ 
    return super(Recurrent, self).__call__(inputs, **kwargs) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/engine/topology.py", line 554, in __call__ 
    output = self.call(inputs, **kwargs) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/layers/recurrent.py", line 290, in call 
    preprocessed_input = self.preprocess_input(inputs, training=None) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/layers/recurrent.py", line 1033, in preprocess_input 
    return K.concatenate([x_i, x_f, x_c, x_o], axis=2) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/keras/backend/tensorflow_backend.py", line 1527, in concatenate 
    return tf.concat([to_dense(x) for x in tensors], axis) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/tensorflow/python/ops/array_ops.py", line 1075, in concat 
    dtype=dtypes.int32).get_shape(
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/ops.py", line 669, in convert_to_tensor 
    ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/constant_op.py", line 176, in _constant_tensor_conversion_function 
    return constant(v, dtype=dtype, name=name) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/constant_op.py", line 165, in constant 
    tensor_util.make_tensor_proto(value, dtype=dtype, shape=shape, verify_shape=verify_shape)) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/tensor_util.py", line 367, in make_tensor_proto 
    _AssertCompatible(values, dtype) 
    File "/Users/peter/tensorflow/lib/python3.5/site-packages/tensorflow/python/framework/tensor_util.py", line 302, in _AssertCompatible 
    (dtype.name, repr(mismatch), type(mismatch).__name__)) 
TypeError: Expected int32, got list containing Tensors of type '_Message' instead. 

Wird es auch auftreten, wenn der erste Fehler behoben ist? Was ist der Fehler hier?

Vielen Dank im Voraus für Ihre Antwort!

Antwort

0

Ich habe den Grund für den Fehler gefunden. Sie können keine TimeDistributed Layer an dieser Position anwenden. Ich musste es durch ein normales LSTM ersetzen (was unter Berücksichtigung des Papiers auch mehr Sinn machen würde). Dann hat es geklappt.

Verwandte Themen