【发布时间】: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。
请指导我。
【问题讨论】:
-
为什么你把wfc设为625?当您放置过滤器时,图像大小会发生变化。并且变化与过滤器尺寸成正比。所以你需要做相关的计算才能得到合适的重量大小。
-
@Beta 你能解释一下计算吗?
-
检查这个 [adeshpande3.github.io/adeshpande3.github.io/….它给出了根据过滤器规格计算尺寸的公式。
-
先生它的显示 - 找不到文件
标签: python python-3.x tensorflow deep-learning