import os import random import numpy as np import tensorflow as tf import matplotlib.pyplot as plt def ReadData(path): x, y = [], [] size=int(len(os.listdir(path))*0.1) dirs = os.listdir(path)[:size] for dir in dirs: x.append(plt.imread(os.path.join(path, dir))[:,:,:1]/ 127.5 - 1) num1,num2=np.eye(10)[int(dir[0:1])],np.eye(10)[int(dir[1:2])] num3,num4=np.eye(10)[int(dir[2:3])],np.eye(10)[int(dir[3:4])] y.append(np.r_[num1, num2, num3, num4]) return np.array(x), np.array(y) def Conv(input, size_in, size_out): W = tf.Variable(tf.truncated_normal([3, 3, size_in, size_out], stddev=0.1)) b = tf.Variable(tf.constant(0.1, shape=[size_out])) conv = tf.nn.conv2d(input, W, [1, 1, 1, 1], 'SAME') a = tf.nn.relu(conv + b) return a def Fc(input, size_in, size_out): W = tf.Variable(tf.truncated_normal([size_in, size_out], stddev=0.1)) b = tf.Variable(tf.constant(0.1, shape=[size_out])) z = tf.matmul(input, W) + b return z def Main(train_path, test_path): X = tf.placeholder(tf.float32, [None, 60, 160,1]) Y = tf.placeholder(tf.float32, [None, 40]) conv1 = Conv(X, 1, 16) conv1_pool = tf.nn.max_pool(conv1, [1, 2, 2, 1], [1, 2, 2, 1], 'SAME') conv2 = Conv(conv1_pool, 16, 64) conv2_pool = tf.nn.max_pool(conv2, [1, 2, 2, 1], [1, 2, 2, 1], 'SAME') flatten=tf.reshape(conv2_pool,[-1,15*40*64]) f3=tf.nn.relu(Fc(flatten,15*40*64,128)) logits=Fc(f3,128,40) loss=tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=logits,labels=Y)) optimizer=tf.train.AdamOptimizer(0.01).minimize(loss) predict=tf.argmax(tf.reshape(logits,[-1, 4, 10]),2) labels=tf.argmax(tf.reshape(Y, [-1, 4, 10]), 2) correct = tf.equal(predict,labels) accuracy = tf.reduce_mean(tf.cast(correct, tf.float32)) x_train,y_train=ReadData(train_path) x_test,y_test=ReadData(test_path) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) epoch,batch=10,10 for e in range(epoch): avg_loss,s=0,0 total_batch=len(y_train)//batch for b in range(total_batch): l,_=sess.run([loss,optimizer],{X:x_train[s:s+batch],Y:y_train[s:s+batch]}) avg_loss+=l/total_batch s+=batch print('loss:',avg_loss) print('accuracy:',sess.run(accuracy, {X: x_test, Y: y_test})) for i in range(10): r=random.randint(0,len(y_test)-1) print('labels:{} predict:{}'.format(sess.run(labels, {Y: y_test[r:r + 1]}),sess.run(predict, {X: x_test[r:r + 1]}))) if __name__ == '__main__': test_path = r"C:\Users\lenovo\Desktop\各种\深度1\代码\test" train_path = r"C:\Users\lenovo\Desktop\各种\深度1\代码\train" Main(train_path,test_path)
请问我这个代码错在了哪里
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 此景应情 2021-03-14 14:01关注
test里面是1000个四位数字验证码,而train里是从0001一直到9999的四位数字验证 为啥最后的精准率只有0.3
解决 无用评论 打赏 举报
悬赏问题
- ¥15 linux安装依赖问题
- ¥50 数据预处理(大量数据)
- ¥15 多设备数据融合可视化显示控制
- ¥15 公众号关键词自动回复超链接
- ¥18 help me! 希望大家来看看 吉~
- ¥15 C++显示超限兔子集结
- ¥15 sql server 2012的下载出错
- ¥15 图像识别用户软件开发
- ¥20 类原生rom lineageos
- ¥15 有没有会做中专,云计算,卷子的,有偿一百块