سلام.
داده های آموزش و اعتبارسنجی را به صورت tfrecord ذخیره کردم. تا جایی که اطلاع دارم وقتی از این نوع داده استفاده می کنم امکان استفاده از feed_dict را ندارم(زیرا feed_dict نوع تنسور را قبول نمی کند.). inference تابعی است که ورودی را دریافت کرده و logits را برمی گرداند. تابع lossو accuracy هزینه و دقت را محاسبه می کند. با کد زیر آموزش به خوبی انجام می شود. دقت در داده های آموزش بالا می رود و تابع هزینه کم می شود ولی دقت مجموعه اعتبارسنجی تقریبا ثابت است. با استفاده از تنسوربرد متوجه شدم که گراف دیگری برای این مجموعه درست می شود و اصلا از وزن های آموزش داده شده برای محاسبه دقت استفاده نمی شود. قبلا که داده ها را به صورت ارایه تعریف می کردم به این مشکل برنخورده بودم. برای این که دقت داده های اعتبار سنجی با استفاده از وزن های آموزش دیده محاسبه گردد باید چه کاری انجام دهم؟
def run_training():
train_images,train_labels = read_and_decode_tfrecord_train(train_data_path)
val_images,val_labels = read_and_decode_tfrecord_validation(validation_data_path)
train_images = tf.cast(train_images,tf.float32)/255.
val_images = tf.cast(train_images,tf.float32)/255.
batch_Xs,batch_Ys=tf.train.shuffle_batch([train_images,train_labels],batch_size=500,capacity=500,min_after_dequeue=100)
batch_xs,batch_ys=tf.train.shuffle_batch([val_images,val_labels],batch_size=500,capacity=500,min_after_dequeue=100)
logits=inference(batch_Xs,1)
total_loss = loss(logits,batch_Ys)
train_op = training(total_loss,learning_rate=LEARNING_RATE)
accuracy = evaluation(logits,batch_Ys)
val_logits=inference(batch_xs,1)
val_accuracy = evaluation(val_logits,batch_ys)
saver = tf.train.Saver(tf.all_variables(), max_to_keep=4,)
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
tf.train.start_queue_runners(sess=sess)
for i in range(NUM_ITER):
_,loss_value,acc=sess.run([train_op,total_loss,accuracy])
if i%10==0:
val_acc,testing_summary_accuracy=sess.run([val_accuracy,testing_summary])
print 'Iteration:',i, ' Loss:',loss_value,' Train Accuracy:',acc,' Validation Accuracy:',val_acc