wepe / MachineLearning

Basic Machine Learning and Deep Learning
5.07k stars 3.16k forks source link

使用keras的example會發生下面問題?請問該如何解決 #14

Open easytrader opened 7 years ago

easytrader commented 7 years ago

Traceback (most recent call last): File "cnn.py", line 57, in model.add(Convolution2D(4, 5, 5, border_mode='valid',input_shape=(1,28,28))) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/models.py", line 276, in add layer.create_input_layer(batch_input_shape, input_dtype) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 370, in create_input_layer self(x) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 514, in call self.add_inbound_node(inbound_layers, node_indices, tensor_indices) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 572, in add_inbound_node Node.create_node(self, inbound_layers, node_indices, tensor_indices) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/engine/topology.py", line 149, in create_node output_tensors = to_list(outbound_layer.call(input_tensors[0], mask=input_masks[0])) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/layers/convolutional.py", line 466, in call filter_shape=self.W_shape) File "/home/leo/anaconda2/lib/python2.7/site-packages/keras/backend/tensorflow_backend.py", line 1639, in conv2d x = tf.nn.conv2d(x, kernel, strides, padding=padding) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen_nn_ops.py", line 394, in conv2d data_format=data_format, name=name) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 703, in apply_op op_def=op_def) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2312, in create_op set_shapes_for_outputs(ret) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1704, in set_shapes_for_outputs shapes = shape_func(op) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 246, in conv2d_shape padding) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 184, in get2d_conv_output_size (row_stride, col_stride), padding_type) File "/home/leo/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/common_shapes.py", line 149, in get_conv_output_size "Filter: %r Input: %r" % (filter_size, input_size)) ValueError: Filter must not be larger than the input: Filter: (5, 5) Input: (1, 28)

wepe commented 7 years ago

如果你后端使用tensorflow,需要reshape成input_shape=(28,28,1)

DaidoujiChen commented 7 years ago

Hello @wepe,

我也遇上這個問題, 然後把 input_shape 改成 (28, 28, 1) 還是報錯, 在 stackoverflow 上面找到一個解法, 也可以正常運行

http://stackoverflow.com/a/39922419

大致是說, 把 ~/.keras/keras.json 的設定改為

{
    "image_dim_ordering": "th", 
    "epsilon": 1e-07, 
    "floatx": "float32", 
    "backend": "tensorflow"
}

應該就行