我是 tensorflow 新手,我已经浏览了教程并成功执行了它们。 现在我必须解决一个问题,即我的输出不应该是像 MNIST 标签 (1-10) 这样的分类输出。我想对图像中的对象进行计数,因此我只需要一个数字输出值,因为结果的范围可能在 0-300+ 之间,因此以 one-hot-vector 编码的结果不适用。
我的代码如下(大部分是从 MNIST tut 复制的)如果我有多个类并且标签被编码在一个单热向量中,它就可以正常工作。
我认为我必须调整的是成本函数:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, 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))
关于function - tensorflow 一数值输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607577/