Input Tensorflow中占位符的形状

Input Tensorflow中占位符的形状,input,tensorflow,conv-neural-network,Input,Tensorflow,Conv Neural Network,我使用Tensorflow的时间很短。我的问题是: 我加载AlexNet权重对其进行微调,所以我给出了50码的批次。 所以我定义: # Graph input x = tf.placeholder(tf.float32, [50, 227, 227, 3]) y = tf.placeholder(tf.float32, [None, 40]) 我给出了一批50幅图像,想要得到40个输出类 然后我定义了我的模型 class Model: @staticmethod def alexnet(_X

我使用Tensorflow的时间很短。我的问题是: 我加载AlexNet权重对其进行微调,所以我给出了50码的批次。 所以我定义:

# Graph input
x = tf.placeholder(tf.float32, [50, 227, 227, 3])
y = tf.placeholder(tf.float32, [None, 40])
我给出了一批50幅图像,想要得到40个输出类

然后我定义了我的模型

class Model:
@staticmethod 
def alexnet(_X, _dropout):
    # Layer 1 (conv-relu-pool-lrn)
    conv1 = conv(_X, 11, 11, 96, 4, 4, padding='VALID', name='conv1')
    conv1 = max_pool(conv1, 3, 3, 2, 2, padding='VALID', name='pool1')
    norm1 = lrn(conv1, 2, 2e-05, 0.75, name='norm1')
    # Layer 2 (conv-relu-pool-lrn)
    conv2 = conv(norm1, 5, 5, 256, 1, 1, group=2, name='conv2')
    conv2 = max_pool(conv2, 3, 3, 2, 2, padding='VALID', name='pool2')
    norm2 = lrn(conv2, 2, 2e-05, 0.75, name='norm2')
    # Layer 3 (conv-relu)
    conv3 = conv(norm2, 3, 3, 384, 1, 1, name='conv3')
    # Layer 4 (conv-relu)
    conv4 = conv(conv3, 3, 3, 384, 1, 1, group=2, name='conv4')
    # Layer 5 (conv-relu-pool)
    conv5 = conv(conv4, 3, 3, 256, 1, 1, group=2, name='conv5')
    pool5 = max_pool(conv5, 3, 3, 2, 2, padding='VALID', name='pool5')
    # Layer 6 (fc-relu-drop)
    fc6 = tf.reshape(pool5, [-1, 6*6*256])
    fc6 = fc(fc6, 6*6*256, 4096, name='fc6')
    fc6 = dropout(fc6, _dropout)
    # Layer 7 (fc-relu-drop)
    fc7 = fc(fc6, 4096, 4096, name='fc7')
    fc7 = dropout(fc7, _dropout)
    # Layer 8 (fc-prob)
    fc8 = fc(fc7, 4096, 40, relu=False, name='fc8')
    return fc8 # fc8 and fc7 (for transfer-learning)
并创造它

keep_var = tf.placeholder(tf.float32)

# Model
pred = Model.alexnet(x, keep_var)  
我可以进行训练,效果很好,但最后,我只想给出一个图像,但是x占位符和y占位符是为50个图像定义的,因此会产生错误。 以下是我在培训后仅给出一张图片的代码:

    x_test = tf.placeholder(tf.float32, [1, 227, 227, 3])
    y_test = tf.placeholder(tf.float32, [None, 40])
    img = loaded_img_train[0][:][:][:] # Only one image
    label = loaded_lab_train[0][:] # Only one label
    prediction = sess.run(pred, feed_dict={x_test: [img],     y_test: [label], keep_var: 1.})
这让我产生了一个错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'Placeholder' with dtype float and shape [50,227,227,3]
 [[Node: Placeholder = Placeholder[dtype=DT_FLOAT, shape=[50,227,227,3], _device="/job:localhost/replica:0/task:0/cpu:0"]()]]
我不知道如何输入我想要的大小

我的练习直接来自cnn的花卉识别

非常感谢你的帮助!
Guillaume

不必将形状的第一个维度设置为固定大小,您可以通过设置“无”而不是数字来为形状的第一个维度使用可变大小。Tensorflow能够通过输入尺寸和形状其他尺寸的固定尺寸计算批次尺寸

对于占位符y,您已做出正确的:

y = tf.placeholder(tf.float32, [None, 40])
对于占位符x,必须设置:

x = tf.placeholder(tf.float32, [None, 227, 227, 3])

不必将形状的第一个尺寸设置为固定尺寸,您可以通过设置“无”而不是数字来为形状的第一个尺寸使用可变尺寸。Tensorflow能够通过输入尺寸和形状其他尺寸的固定尺寸计算批次尺寸

对于占位符y,您已更正:

y = tf.placeholder(tf.float32, [None, 40])
对于占位符x,必须设置:

x = tf.placeholder(tf.float32, [None, 227, 227, 3])

我这样做了,但是当我定义卷积层时,我遇到了另一个错误:
bias=tf.reforme(tf.nn.bias\u add(conv,biases),conv.get\u shape().as\u list())
据说:
TypeError:预期的二进制或unicode字符串,没有
它在conv.get\u shape()中我有一个问题。Conv被定义为:
convalve=lambda i,k:tf.nn.conv2d(i,k[1,s_h,s_w,1],padding=padding),tf.variable_scope(name)作为作用域:#为Conv层内核的权重和偏差创建tf变量=make_var('weights',shape=[k_h,k_w,int(c_i)/group,c#o]))如果组==1:conv=convalve(输入,内核)
我知道我有点迷路了!我需要练习!检查,在另一个stackoverflow问题()中,它引用了这个。我这样做了,但当我定义卷积层时,我又遇到了另一个错误:
bias=tf.reforme(tf.nn.bias\u add(conv,biases),conv.get\u shape().as\u list())
它说:
TypeError:Expected binary或unicode字符串,get None
我在conv.get_shape()中遇到了问题。conv被定义为:
convalve=lambda i,k:tf.nn.conv2d(i,k[1,s_h,s_w,1],padding=padding),tf.variable_scope(name)作为作用域:#为conv层内核的权重和偏差创建tf变量=make_var('weights',shape=[k_h,k_w,int(c_i)/group,c_o])biases=make_var('biases',[c_o])如果group==1:conv=convalve(input,kernel)
我知道我有点迷路了!我需要练习!检查一下,在另一个stackoverflow问题()中,它引用了这个。