2017-02-20 3 views
0

Es gibt eine in-detaillierte Post auf keras blog.
Aber wenn Sie den Code kompiliert ich die Fehler wie folgt:
wenn ich dim_ordering='th' gesetzt Dieser Fehler gehtVisualisierung der Eingänge zu Faltung neuronalen Netzen mit Keras und Tensorflow als Backend

Using TensorFlow backend. 
Traceback (most recent call last): 
    File "visulaize_cifar.py", line 24, in <module> 
    model.add(MaxPooling2D((2, 2), strides=(2, 2))) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/models.py", line 332, in add 
    output_tensor = layer(self.outputs[0]) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 572, in __call__ 
    self.add_inbound_node(inbound_layers, node_indices, tensor_indices) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 635, in add_inbound_node 
    Node.create_node(self, inbound_layers, node_indices, tensor_indices) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 166, in create_node 
    output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0])) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/layers/pooling.py", line 160, in call 
    dim_ordering=self.dim_ordering) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/layers/pooling.py", line 210, in _pooling_function 
    pool_mode='max') 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 2866, in pool2d 
    x = tf.nn.max_pool(x, pool_size, strides, padding=padding) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/ops/nn_ops.py", line 1617, in max_pool 
    name=name) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 1598, in _max_pool 
    data_format=data_format, name=name) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 759, in apply_op 
    op_def=op_def) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2242, in create_op 
    set_shapes_for_outputs(ret) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1617, in set_shapes_for_outputs 
    shapes = shape_func(op) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1568, in call_with_requiring 
    return call_cpp_shape_fn(op, require_shape_fn=True) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 610, in call_cpp_shape_fn 
    debug_python_shape_fn, require_shape_fn) 
    File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 675, in _call_cpp_shape_fn_impl 
    raise ValueError(err.message) 
ValueError: Negative dimension size caused by subtracting 2 from 1 for 'MaxPool_1' (op: 'MaxPool') with input shapes: [1,1,64,128]. 

.
Aber wie ich Tensorflow Backend verwende, so sollte Dimension Bestellung dim_ordering='tf' sein.
Auch nach dim_ordering als 'th' Einstellung, ich Fehler beim loading weights von vgg16_weights.h5 wie folgt:

Traceback (most recent call last): 
File "visulaize_cifar.py", line 67, in <module> 
    model.layers[k].set_weights(weights) 
File "/home/dude_perf3ct/.local/lib/python2.7/site-packages/keras/engine/topology.py", line 985, in set_weights 
    'provided weight shape ' + str(w.shape)) 
ValueError: Layer weight shape (3, 3, 128, 64) not compatible with provided weight shape (64, 3, 3, 3). 

Wie detailliert in this post zu 'th' und 'tf'.
Der obige Fehler impliziert, dass Layer-Gewichte in 'tf' sind (aber ich habe ihn auf 'th' gesetzt, um den ersten Fehler zu vermeiden) und die Gewichtsform in der 'Reihenfolge' bereitgestellt.
What seems to be the error?

Antwort

0

Antwort auf diese Frage war ziemlich einfach. Als habe ich tensorflow als Backend verwendet. Also, um zu konvertieren habe ich die Zeile

nach from keras import backend as K eingefügt.
Dies ist, weil die vgg16_weights.h5 hat th Format und auch cifar10.load_data().

Verwandte Themen