【问题标题】:Dimensional Error in CNNCNN中的维度误差
【发布时间】:2018-08-29 14:24:09
【问题描述】:

我正在尝试创建一个 CNN 来区分猫和狗 我从 Kaggle 获取的数据 展平图层后我遇到了错误。

模型参数如下:

IMG_SIZE=55

filter_size = 5;
no_of_filters1 = 16;
no_of_filters2 = 32;
no_of_filters3 = 64;
classes=2
x=tf.placeholder(tf.float32,[None,IMG_SIZE,IMG_SIZE,1])
y=tf.placeholder(tf.float32,[None,classes])

w1= weights([filter_size,filter_size,1,no_of_filters1])
w2= weights([filter_size,filter_size,no_of_filters1,no_of_filters2])
w3= weights([filter_size,filter_size,no_of_filters2,no_of_filters3])
wfc=weights([no_of_filters3,625])-ERROR
w_0=weights([625,classes])

我的 CNN 模型:

def model(x,w1,w2,w3,w4,w_o):

    #Layer1
    layer1= tf.nn.conv2d(x,w1,strides=[1,1,1,1],padding='SAME')
    layer1= tf.nn.relu(layer1)
    layer1=tf.nn.max_pool(layer1,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

    # Layer2
    layer2 = tf.nn.conv2d(layer1,w2, strides=[1, 1, 1, 1],
                          padding='SAME')
    layer2 = tf.nn.relu(layer2)
    layer2 = tf.nn.max_pool(layer2, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],padding='SAME')

    layer3 = tf.nn.conv2d(layer2,w3,
                          strides=[1, 1, 1, 1],
                          padding='SAME')
    layer3 = tf.nn.relu(layer3)
    layer3 = tf.nn.max_pool(layer3, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1],padding='SAME')

    layer_shape= layer3.get_shape()
    num_features = layer_shape[1:4].num_elements()

    fc_layer=tf.reshape(layer3,[-1,num_features])
    fc_layer=tf.nn.relu(fc_layer)

    ouput_layer= tf.nn.relu(tf.matmul(fc_layer,w4))
    logits= tf.matmul(ouput_layer,w_o)

    return logits

引发的错误是:

ValueError:尺寸必须相等,但对于输入形状为 [?,1024]、[64,625] 的“MatMul”(操作:“MatMul”),尺寸必须是 1024 和 64。

请指导我。

【问题讨论】:

标签: python python-3.x tensorflow deep-learning


【解决方案1】:

对于 Fc 层,您需要将 weights 的第一个维度与输入的最后一个维度匹配,在本例中为 1024

no_filters_in = 1024
wfc=weights([no_filters_in, no_of_filters3])

【讨论】:

    【解决方案2】:

    您需要考虑特征图大小。假设 layer3 的形状是 (4,4,no_of_filters3),其中 4x4 是特征图大小。那么 fc_layer 的形状就是 (4x4xno_of_filters3, 1)。当你执行“tf.matmul(fc_layer,w4)”时,w4的正确形状应该是(4x4xno_of_filters3, 625)。

    【讨论】:

      猜你喜欢
      • 2016-11-18
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多