Function tensorflow一个数值输出

Function tensorflow一个数值输出,function,output,tensorflow,numerical,Function,Output,Tensorflow,Numerical,我是tensorflow的新手,我已经阅读了教程并成功地执行了它们。 现在,我必须解决一个问题,即我的输出不应该是MNIST标签(1-10)那样的分类输出。我想对图像中的对象进行计数,因此我只需要一个数字输出值,因为结果可能在0-300+之间,所以在一个热向量中编码的结果不适用 下面是我的代码(大部分是从MNIST tut复制的),如果我有多个类,并且标签编码在一个热向量中,它就可以正常工作 我认为我需要调整的是成本函数: 成本= 减少平均值(预测,y) 但我不知道怎么做。有人能帮我吗 因此,预

我是tensorflow的新手,我已经阅读了教程并成功地执行了它们。 现在,我必须解决一个问题,即我的输出不应该是MNIST标签(1-10)那样的分类输出。我想对图像中的对象进行计数,因此我只需要一个数字输出值,因为结果可能在0-300+之间,所以在一个热向量中编码的结果不适用

下面是我的代码(大部分是从MNIST tut复制的),如果我有多个类,并且标签编码在一个热向量中,它就可以正常工作

我认为我需要调整的是成本函数:

成本= 减少平均值(预测,y)

但我不知道怎么做。有人能帮我吗 因此,预测返回一个值,y(地面真值)也是一个值,例如,对于5个对象[5]

### CNN CONFIG


n_classes = 1
batch_size = 100

x = tf.placeholder('float', [None, 16384])  # 128*128 = 16384   28*28 = 784
y = tf.placeholder('float')

keep_rate = 0.8
keep_prob = tf.placeholder(tf.float32)


def conv2d(x, W):
    return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')


def maxpool2d(x):
    #                        size of window         movement of window
    return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')


def convolutional_neural_network(x):
    weights = {'W_conv1': tf.Variable(tf.random_normal([5, 5, 1, 32])),
               'W_conv2': tf.Variable(tf.random_normal([5, 5, 32, 64])),
               'W_fc': tf.Variable(tf.random_normal([32 * 32 * 64, 1024])),
               'out': tf.Variable(tf.random_normal([1024, n_classes]))}

    biases = {'b_conv1': tf.Variable(tf.random_normal([32])),
              'b_conv2': tf.Variable(tf.random_normal([64])),
              'b_fc': tf.Variable(tf.random_normal([1024])),
              'out': tf.Variable(tf.random_normal([n_classes]))}

    x = tf.reshape(x, shape=[-1, 128, 128, 1])

    conv1 = tf.nn.relu(conv2d(x, weights['W_conv1']) + biases['b_conv1'])
    conv1 = maxpool2d(conv1)

    conv2 = tf.nn.relu(conv2d(conv1, weights['W_conv2']) + biases['b_conv2'])
    conv2 = maxpool2d(conv2)

    #fc = tf.reshape(conv2, [-1, 7 * 7 * 64])
    fc = tf.reshape(conv2, [-1, 32 * 32 * 64])
    fc = tf.nn.relu(tf.matmul(fc, weights['W_fc']) + biases['b_fc'])
    #fc = tf.nn.dropout(fc, keep_rate)

    output = tf.matmul(fc, weights['out']) + biases['out']

    return output


def train_neural_network(x):
    prediction = convolutional_neural_network(x)
    cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y))
    optimizer = tf.train.AdamOptimizer().minimize(cost)

    #saver
    saver = tf.train.Saver()

    hm_epochs = 50
    with tf.Session() as sess:
        sess.run(tf.initialize_all_variables())

        for epoch in range(hm_epochs):
            epoch_loss = 0
            logging.debug('Epoch: ' + str(epoch) +' started')

            for i in range(int(len(train_database['images']) / batch_size)):
                epoch_x, epoch_y = getNextBatch(train_database, (i + 1) * batch_size)

                _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y})
                epoch_loss += c

            print('Epoch', epoch, 'completed out of', hm_epochs, 'loss:', epoch_loss)

标准方法是使用均方误差:

cost = tf.reduce_mean(tf.square(prediction - y))

好的,谢谢,我替换了我的成本函数,现在我正在再次训练我的模型。到目前为止看起来不错。谢谢:-)