2017-05-09 28 views
1

Ich versuche, ein Modell zu definieren, eine kompilieren, aber ich bin aus irgendeinem Grunde nicht in der Lage zu kompilieren oder dieses Modell definieren ...Objekt hat kein Attribut ‚inbound_nodes‘

def fws(): 
    filter_size = 8 
    pooling_size = 6 
    stride_step = 2 
    J = 80 
    splits = 33 
    total_frames_with_deltas = 45 
    pool_splits = ((splits - pooling_size)+1)/2 
    print "pool_splits" + str(pool_splits) 
    print "Printing shapes" 

    list_of_input = [Input(shape=(8,3)) for i in range(splits*total_frames_with_deltas)] 
    output_convolution = [] 

    for steps in range(total_frames_with_deltas): 
     conv = Conv1D(filters = J, kernel_size = 8) 
     column = 0 
     skip = 45 
     conv_output = [] 
     for _ in range(splits): 
      conv_output.append(conv(list_of_input[(column*skip)+steps])) 
      column = column + 1 
     output_convolution.append((conv_output)) 

    print len(output_convolution) 
    print len(output_convolution[0]) 

    out = 0 
    output_conv = [] 

    for row in range(splits): 
     for column in range(total_frames_with_deltas): 
      #print row 
      #print column 
      out = out + output_convolution[column][row] 
     output_conv.append(out) 

    output_con = Concatenate()(output_conv) 
    output_con = Reshape((splits,-1))(output_con) 

    pooled = MaxPooling1D(pool_size = pooling_size, strides = stride_step)(output_con) 
    print pooled.shape 
    #reshape = Reshape((3,-1))(pooled) 

    #fc 
    dense1 = Dense(units = 1000, activation = 'relu', name = "dense_1")(pooled) 
    dense2 = Dense(units = 1000, activation = 'relu', name = "dense_2")(dense1) 
    dense3 = Dense(units = 50 , activation = 'softmax', name = "dense_3")(dense2) 
    raw_input("Model definition ok!") 

    model = Model(inputs = list_of_input , outputs = dense3) 
    raw_input("Model definition with input/output") 

    model.compile(loss="categorical_crossentropy", optimizer='sgd' , metrics = [metrics.categorical_accuracy]) 

Dies ist der vollständige Fehler Nachricht:

File "keras_cnn_phoneme_original_fit_generator.py", line 231, in <module> 
    fws() 
    File "keras_cnn_phoneme_original_fit_generator.py", line 212, in fws 
    model = Model(inputs = list_of_input , outputs = dense3) 
    File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 88, in wrapper 
    return func(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1676, in __init__ 
    build_map_of_graph(x, finished_nodes, nodes_in_progress) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1666, in build_map_of_graph 
    layer, node_index, tensor_index) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1666, in build_map_of_graph 
    layer, node_index, tensor_index) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1666, in build_map_of_graph 
    layer, node_index, tensor_index) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1666, in build_map_of_graph 
    layer, node_index, tensor_index) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1666, in build_map_of_graph 
    layer, node_index, tensor_index) 
    File "/usr/local/lib/python2.7/dist-packages/keras/engine/topology.py", line 1664, in build_map_of_graph 
    next_node = layer.inbound_nodes[node_index] 
AttributeError: 'NoneType' object has no attribute 'inbound_nodes' 

der Fehler scheint die Eingabe und Ausgabe des Netzwerks .. ich bin nicht sicher, warum .. Sowohl die Faltung und die Bündelung des Eingangs entwickelt wurde, um dann auftreten, wenn definieren zu handhaben .. also der Fehler macht für mich keinen Sinn?

Antwort

1

Etwas spät, aber ich hatte nur ein ähnliches Problem, und ich denke, jemand anderes könnte ein ähnliches Problem haben. Ich denke, die Linie, die Sie falsch verstanden ist:

out = out + output_convolution[column][row] 

Versuchen Sie es zu ändern:

out = add([out, output_convolution[column][row]])) 

Wo add in keras.layers.merge ist. Im Gegensatz zu Tensorflow scheint Keras nicht in der Lage zu sein, a+b als Knoten in der Grafik zu interpretieren, daher bremst es.

Auch für die Zukunft, was ich tun wollte, war zwei Tensoren subract (a - b) wie folgt:

subt = add([a, -b]) 

, die die gleiche Ausnahme auslöst. Die Art, wie ich es getan habe, war b als -b zu definieren, nicht schick, aber es funktioniert.

Verwandte Themen