2017-07-03 10 views
0

TensorFlowを初めて使用しています。私のデータセットの各画像は16x16サイズです。 ここは、私のコードです、私はこのエラーがあります。私はコードと、各畳み込み層の形状の詳細を提供します。寸法は等しくなければなりませんが、入力形状が「MatMul_15」(op: 'MatMul')の場合は1024と3136です。[100,1024]、[3136,100]

私は何か助けに感謝します。

def my_conv_net(input_data): 
 
    
 
    batch_size = 100 
 
    learning_rate = 0.005 
 
    evaluation_size = 500 
 
# image_width = ttrainData[0].shape[0] 
 
# image_height = ttrainData[0].shape[1] 
 
    image_width = 16 
 
    image_height = 16 
 
# target_size = max(ttrainLabels) + 1 
 
    num_channels = 1 
 
    generations = 500 
 
    eval_every = 5 
 
    conv1_features = 32 
 
    conv2_features = 64 
 
    max_pool_size1 = 2 
 
    max_pool_size2 = 2 
 
    fully_connected_size1 = 100 
 
    dropout_prob = 0.75 
 
    
 
    # First Conv-ReLU-MaxPool Layer 
 
    conv1 = tf.nn.conv2d(input_data, conv1_weight, strides=[1, 1, 1, 1], padding='SAME') 
 
    relu1 = tf.nn.relu(tf.nn.bias_add(conv1, conv1_bias)) 
 
    max_pool1 = tf.nn.max_pool(relu1, ksize=[1, max_pool_size1, max_pool_size1, 1], strides=[1, max_pool_size1, max_pool_size1, 1], padding='SAME') 
 
    
 
    print("input_data>>>: ", input_data) 
 
    print("conv1_weight>>>: ", conv1_weight) 
 
    print("conv1_weight get shape: ", conv1_weight.get_shape()) 
 
    print("conv1_bias>>>: ", conv1_bias) 
 
    print("conv1>>>: ", conv1) 
 
    print("relu1>>>: ", relu1) 
 
    print("max_pool1>>>: ", max_pool1) 
 
    print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n") 
 
    
 
    # Second Conv-ReLU-MaxPool Layer 
 
    conv2 = tf.nn.conv2d(max_pool1, conv2_weight, strides=[1, 1, 1, 1], padding='SAME') 
 
    relu2 = tf.nn.relu(tf.nn.bias_add(conv2, conv2_bias)) 
 
    max_pool2 = tf.nn.max_pool(relu2, ksize=[1, max_pool_size2, max_pool_size2, 1], strides=[1, max_pool_size2, max_pool_size2, 1], padding='SAME') 
 
    
 
    print("conv2_weight>>>: ", conv2_weight) 
 
    print("conv2_bias>>>: ", conv2_bias) 
 
    print("conv2>>>: ", conv2) 
 
    print("relu2>>>: ", relu2) 
 
    print("max_pool2>>>: ", max_pool2) 
 
    print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n") 
 
    
 
    # Transform Output into a 1xN layer for next fully connected layer 
 
    final_conv_shape = max_pool2.get_shape().as_list() 
 
    final_shape = final_conv_shape[1] * final_conv_shape[2] * final_conv_shape[3] 
 
    flat_output = tf.reshape(max_pool2, [final_conv_shape[0], final_shape]) 
 
    
 
    # First Fully Connected Layer 
 
    print("flat_output ***: ", type(flat_output)) 
 
    print("flat_output ***: ", flat_output) 
 
    print("full1_weight ***: ", type(full1_weight)) 
 
    print("full1_weight ***: ", full1_weight) 
 
    print("full1_bias ***: ", type(full1_bias)) 
 
    print("full1_bias ***: ", full1_bias) 
 
    
 
    fully_connected1 = tf.nn.relu(tf.add(tf.matmul(flat_output, full1_weight), full1_bias)) 
 
    
 
    # Second Fully Connected Layer 
 
    final_model = tf.add(tf.matmul(fully_connected1, full2_weight), full2_bias) 
 
    
 
    # Add dropout 
 
    final_model_output = tf.nn.dropout(final_model, dropout) 
 
    
 
    return(final_model_output)

そして、これは私が得たものです。

ttrainData type: <class 'numpy.ndarray'> 
 
ttrainData shape: (279, 16, 16) 
 
train_data type: <class 'numpy.ndarray'> 
 
teval_dataArray shape: (120, 16, 16) 
 
ttrainData[0]: [[ 31. 30. 29. ..., 34. 41. 43.] 
 
[ 31. 31. 30. ..., 33. 38. 40.] 
 
[ 31. 32. 32. ..., 32. 37. 39.] 
 
..., 
 
[ 26. 30. 37. ..., 48. 52. 54.] 
 
[ 32. 34. 39. ..., 45. 46. 45.] 
 
[ 42. 41. 42. ..., 45. 41. 37.]] 
 
ttrainData[0]: (16, 16) 
 
ttestData[0]: [[ 116. 101. 86. ..., 96. 89. 82.] 
 
[ 125. 111. 96. ..., 91. 86. 81.] 
 
[ 130. 119. 106. ..., 88. 87. 85.] 
 
..., 
 
[ 120. 117. 116. ..., 107. 107. 111.] 
 
[ 123. 120. 120. ..., 115. 114. 118.] 
 
[ 126. 122. 122. ..., 121. 119. 123.]] 
 
ttestData[0]: (16, 16) 
 
$$$$$$$$$$$$$$$$$ checking1 $$$$$$$$$$$$$$$$$ 
 

 
image_width: 16 
 
image_height: 16 
 
Type of fully_connected_size1: <class 'int'> 
 
fully_connected_size1 is: 100 
 
Type of target_size: <class 'numpy.float64'> 
 
target_size is: 2.0 
 
*********convert float to int 1st way: 2 
 
*********convert float to int: <class 'int'> 
 
$$$$$$$$$$$$$$$$ checking2 $$$$$$$$$$$$$$$$$$$ 
 

 
checking3 
 
checking4 
 
checking5 
 
input_data>>>: Tensor("Placeholder_31:0", shape=(100, 16, 16, 1), dtype=float32) 
 
conv1_weight>>>: Tensor("Variable/read:0", shape=(4, 4, 1, 32), dtype=float32) 
 
conv1_weight get shape: (4, 4, 1, 32) 
 
conv1_bias>>>: Tensor("Variable_1/read:0", shape=(32,), dtype=float32) 
 
conv1>>>: Tensor("Conv2D_14:0", shape=(100, 16, 16, 32), dtype=float32) 
 
relu1>>>: Tensor("Relu_20:0", shape=(100, 16, 16, 32), dtype=float32) 
 
max_pool1>>>: Tensor("MaxPool_14:0", shape=(100, 8, 8, 32), dtype=float32) 
 
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
 

 
conv2_weight>>>: Tensor("Variable_2/read:0", shape=(4, 4, 32, 64), dtype=float32) 
 
conv2_bias>>>: Tensor("Variable_3/read:0", shape=(64,), dtype=float32) 
 
conv2>>>: Tensor("Conv2D_15:0", shape=(100, 8, 8, 64), dtype=float32) 
 
relu2>>>: Tensor("Relu_21:0", shape=(100, 8, 8, 64), dtype=float32) 
 
max_pool2>>>: Tensor("MaxPool_15:0", shape=(100, 4, 4, 64), dtype=float32) 
 
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ 
 

 
flat_output ***: <class 'tensorflow.python.framework.ops.Tensor'> 
 
flat_output ***: Tensor("Reshape_13:0", shape=(100, 1024), dtype=float32) 
 
full1_weight ***: <class 'tensorflow.python.ops.variables.Variable'> 
 
full1_weight ***: Tensor("Variable_4/read:0", shape=(3136, 100), dtype=float32) 
 
full1_bias ***: <class 'tensorflow.python.ops.variables.Variable'> 
 
full1_bias ***: Tensor("Variable_5/read:0", shape=(100,), dtype=float32) 
 
Traceback (most recent call last): 
 

 
    File "<ipython-input-22-1db506e814de>", line 1, in <module> 
 

 
    
 
ValueError: Dimensions must be equal, but are 1024 and 3136 for 'MatMul_15' (op: 'MatMul') with input shapes: [100,1024], [3136,100].

+0

行列サイズ(100,1024)と(3136,100)の行列乗算に誤差点があります。内側の寸法は一致する必要があります。 2番目の行列 'full1_weight'はサイズ(1024,100)でなければなりません –

+0

2つの行列==> column(matrix1)= raw(matrix2)を乗算するには正しいです。ありがとうございました – Shittel

答えて

2

あなた=成形する(1、100、16、16)=形状を変更しなければならない - 「は、バッチサイズのために-1に示される(1、1、16、16) "

関連する問題