python - Tensorflow result is bad -
i trying using tfrecord files store , read mnist data, data in bmp format, store them tfrecord file, , read it. however, training result bad, accuracy seems random number while correct result should increasing. confused this. me this?
# -*- coding: utf-8 -*- import tensorflow tf #import input_data import tfrecord_generate tfg import numpy np model_path = 'check_point/model.ckpt' sess = tf.interactivesession() #mnist = input_data.read_data_sets('mnist_data', one_hot=true) #tfg.fun_generate_tfrecord() img,label = tfg.read_data('train.tfrecords') def weight_variable(shape): initial = tf.truncated_normal(shape, stddev=0.1) return tf.variable(initial) def bias_variable(shape): initial = tf.constant(0.1, shape=shape) return tf.variable(initial) def conv2d(x, w): return tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='same') def max_pool_2x2(x): return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='same') x = tf.placeholder("float", shape=[none, 784]) y_ = tf.placeholder("float", shape=[none, 10]) w_conv1 = weight_variable([5, 5, 1, 32]) b_conv1 = bias_variable([32]) x_image = tf.reshape(x, [-1,28,28,1]) h_conv1 = tf.nn.relu(conv2d(x_image, w_conv1) + b_conv1) h_pool1 = max_pool_2x2(h_conv1) w_conv2 = weight_variable([5, 5, 32, 64]) b_conv2 = bias_variable([64]) h_conv2 = tf.nn.relu(conv2d(h_pool1, w_conv2) + b_conv2) h_pool2 = max_pool_2x2(h_conv2) w_fc1 = weight_variable([7 * 7 * 64, 1024]) b_fc1 = bias_variable([1024]) h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64]) h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, w_fc1) + b_fc1) keep_prob = tf.placeholder("float") h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob) w_fc2 = weight_variable([1024, 10]) b_fc2 = bias_variable([10]) y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, w_fc2) + b_fc2) cross_entropy = -tf.reduce_sum(y_*tf.log(y_conv)) train_step = tf.train.adamoptimizer(1e-4).minimize(cross_entropy) correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer()) #x_batch, y_batch = tf.train.shuffle_batch([img, label], batch_size=50, # capacity=200, min_after_dequeue=500, num_threads=1) x_batch, y_batch = tf.train.batch([img, label], batch_size=50, capacity=200, num_threads=8) sess.run(init) saver=tf.train.saver() tf.train.start_queue_runners(sess=sess) in range(20000): #print(i,'\n') #val_img, val_label = sess.run([img, label]) #print(val_img) #print(val_label) train_feture, train_label = sess.run([x_batch, y_batch]) #print(train_feture, train_label) if i%100 == 0: train_accuracy = accuracy.eval(feed_dict={ x:train_feture, y_: train_label, keep_prob: 1.0}) print ("step %d, training accuracy %g"%(i, train_accuracy)) train_step.run(feed_dict={x: train_feture, y_: train_label, keep_prob: 0.5}) save_path = saver.save(sess, model_path) #print ("test accuracy %g"%accuracy.eval(feed_dict={ # x: #mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})) tfrecord_generate file :
def fun_generate_tfrecord(): img_list = [] lab_list = [] writer = tf.python_io.tfrecordwriter("train.tfrecords") index, name in enumerate(classes): class_path = cwd + "/" + name + "/" label = np.zeros(10, np.float) label[index] = 1. img_name in os.listdir(class_path): img_path = class_path + img_name img_list.append(img_path) lab_list.append(label) ''' img = cv2.imread(img_path, 0) img = cv2.resize(img,(28,28),interpolation=cv2.inter_cubic) #img_sobel_y = cv2.sobel(img, cv2.cv_16s, 0, 1) #feature_row = img.sum(axis=1) #feature_row_sobel = img_sobel_y.sum(axis=1) #feature_all = np.vstack((feature_row, feature_row_sobel)) #print(img) #print(label) img_bytes = img.tobytes() label_bytes = label.tobytes() example = tf.train.example(features=tf.train.features(feature={ "label": tf.train.feature(bytes_list=tf.train.byteslist(value=[label_bytes])), "feature": tf.train.feature(bytes_list=tf.train.byteslist(value=[img_bytes])) })) writer.write(example.serializetostring()) #���л�Ϊ�ַ��� ''' random_list = random.sample(range(0,len(img_list)), len(img_list)) in random_list: img_path = img_list[i] label = lab_list[i] img = cv2.imread(img_path, 0) img = cv2.resize(img,(28,28),interpolation=cv2.inter_cubic) #img_sobel_y = cv2.sobel(img, cv2.cv_16s, 0, 1) #feature_row = img.sum(axis=1) #feature_row_sobel = img_sobel_y.sum(axis=1) #feature_all = np.vstack((feature_row, feature_row_sobel)) #print(img) #print(label) img_bytes = img.tobytes() label_bytes = label.tobytes() example = tf.train.example(features=tf.train.features(feature={ "label": tf.train.feature(bytes_list=tf.train.byteslist(value=[label_bytes])), "feature": tf.train.feature(bytes_list=tf.train.byteslist(value=[img_bytes])) })) writer.write(example.serializetostring()) #���л�Ϊ�ַ��� print("....write down tfrecord over....") writer.close() def read_data(filename): #�����ļ�������һ������ filename_queue = tf.train.string_input_producer([filename], shuffle = true) reader = tf.tfrecordreader() _, serialized_example = reader.read(filename_queue) #�����ļ������ļ� features = tf.parse_single_example(serialized_example, features={ "label": tf.fixedlenfeature([], tf.string), "feature": tf.fixedlenfeature([], tf.string), }) img_feature = tf.decode_raw(features['feature'], tf.uint8) img_feature = tf.reshape(img_feature, [28*28]) label = tf.decode_raw(features['label'], tf.float64) label = tf.reshape(label, [10]) return img_feature, label the out :
step 0, training accuracy 0.06 step 100, training accuracy 0.12 step 200, training accuracy 0.2 step 300, training accuracy 0.1 step 400, training accuracy 0.12 step 500, training accuracy 0.12 step 600, training accuracy 0.1 step 700, training accuracy 0.1 step 800, training accuracy 0.06 step 900, training accuracy 0.14 step 1000, training accuracy 0.04 step 1100, training accuracy 0.16 step 1200, training accuracy 0.06 step 1300, training accuracy 0.12 step 1400, training accuracy 0.2 step 1500, training accuracy 0.1 step 1600, training accuracy 0.12 step 1700, training accuracy 0.12 step 1800, training accuracy 0.1 step 1900, training accuracy 0.12 step 2000, training accuracy 0.08 step 2100, training accuracy 0.14 step 2200, training accuracy 0.04 step 2300, training accuracy 0.16 step 2400, training accuracy 0.06 step 2500, training accuracy 0.12 step 2600, training accuracy 0.2 step 2700, training accuracy 0.1 step 2800, training accuracy 0.12 step 2900, training accuracy 0.12 step 3000, training accuracy 0.1 step 3100, training accuracy 0.12 step 3200, training accuracy 0.06 step 3300, training accuracy 0.14 step 3400, training accuracy 0.04 step 3500, training accuracy 0.14 step 3600, training accuracy 0.06 step 3700, training accuracy 0.12
Comments
Post a Comment