此景应情 2021-03-14 13:55 采纳率: 0%
浏览 32

请问我这个代码错在了哪里

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)
  • 写回答

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 有没有会做中专,云计算,卷子的,有偿一百块