2016-11-15 11 views
1

私はテンソルフローが新しく、チュートリアルを見て、それらを正常に実行しました。 今、私の出力は、MNISTラベル(1-10)のようなカテゴリのものであってはならない問題を解決する必要があります。私は1つのホットベクトルにエンコードされた結果は適用されませんので、結果は0〜300 +の範囲にある可能性があるので、画像内のオブジェクトを数えたいので、ただ1つの数値出力値が必要です。テンソル1つの数値出力

私のコードは以下です(ほとんどがMNISTのtutからコピーされています)。私が複数のクラスを持ち、ラベルがone-hot-vectorでエンコードされていれば正常に動作します。

私は私は何を調整する必要がすることは、コスト関数であると思う:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y))

しかし、私はどのように知りません。誰も私を喜ばせることができます 予測は1つの値を返し、y(地面の真理)も1つの値などです。[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) 

答えて

2

二乗誤差:

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

は大丈夫、私は私のコスト関数を置き換え、そして私は今、再び私のモデルを訓練しています、ありがとうございました。これまでのところ、それは良い見えます。ありがとうございました :-) – Biba

関連する問題