10 用训练好的模型进行预测

从命令行参数读取需要预测的数据

10.1 predict1
程序:

import numpy as np
import sys

predictData = None

argt = sys.argv[1:]

for v in argt:
    if v.startswith("-predict="):
        tmpStr = v[len("-predict="):]
        print("tmpStr: %s" % tmpStr)
        predictData = np.fromstring(tmpStr, dtype=np.float32, sep=",")

print("predictData: %s" % predictData)

结果:
predictData: None

10.2 predict2
程序:

import tensorflow as tf
import numpy as np
import random
import os
import sys

ifRestartT = False

predictData = None

argt = sys.argv[1:]

for v in argt:
    if v == "-restart":
        ifRestartT = True
    if v.startswith("-predict="):
        tmpStr = v[len("-predict="):]
        predictData = np.fromstring(tmpStr, dtype=np.float32, sep=",")

print("predictData: %s" % predictData)

trainResultPath = "./save/idcard2"

random.seed()

x = tf.placeholder(tf.float32)
yTrain = tf.placeholder(tf.float32)

w1 = tf.Variable(tf.random_normal([4, 8], mean=0.5, stddev=0.1), dtype=tf.float32)
b1 = tf.Variable(0, dtype=tf.float32)

xr = tf.reshape(x, [1, 4])

n1 = tf.nn.tanh(tf.matmul(xr, w1) + b1)

w2 = tf.Variable(tf.random_normal([8, 2], mean=0.5, stddev=0.1), dtype=tf.float32)
b2 = tf.Variable(0, dtype=tf.float32)

n2 = tf.matmul(n1, w2) + b2

y = tf.nn.softmax(tf.reshape(n2, [2]))

loss = tf.reduce_mean(tf.square(y - yTrain))

optimizer = tf.train.RMSPropOptimizer(0.01)

train = optimizer.minimize(loss)

sess = tf.Session()

if ifRestartT:
    print("force restart...")
    sess.run(tf.global_variables_initializer())
elif os.path.exists(trainResultPath + ".index"):
    print("loading: %s" % trainResultPath)
    tf.train.Saver().restore(sess, save_path=trainResultPath)
else:
    print("train result path not exists: %s" % trainResultPath)
    sess.run(tf.global_variables_initializer())

if predictData is not None:
    result = sess.run([x, y], feed_dict={x: predictData})
    print(result[1])
    print(y.eval(session=sess, feed_dict={x: predictData}))
    sys.exit(0)

lossSum = 0.0

for i in range(5):

    xDataRandom = [int(random.random() * 10), int(random.random() * 10), int(random.random() * 10), int(random.random() * 10)]
    if xDataRandom[2] % 2 == 0:
        yTrainDataRandom = [0, 1]
    else:
        yTrainDataRandom = [1, 0]

    result = sess.run([train, x, yTrain, y, loss], feed_dict={x: xDataRandom, yTrain: yTrainDataRandom})

    lossSum = lossSum + float(result[len(result) - 1])

    print("i: %d, loss: %10.10f, avgLoss: %10.10f" % (i, float(result[len(result) - 1]), lossSum / (i + 1)))

    if os.path.exists("save.txt"):
        os.remove("save.txt")
        print("saving...")
        tf.train.Saver().save(sess, save_path=trainResultPath)

resultT = input('Would you like to save? (y/n)')

if resultT == "y":
    print("saving...")
    tf.train.Saver().save(sess, save_path=trainResultPath)

结果:

predictData: None
loading: ./save/idcard2
i: 0, loss: 0.0000723387, avgLoss: 0.0000723387
i: 1, loss: 0.1840327382, avgLoss: 0.0920525385
i: 2, loss: 0.1533217579, avgLoss: 0.1124756116
i: 3, loss: 0.0000722930, avgLoss: 0.0843747820
i: 4, loss: 0.3304394484, avgLoss: 0.1335877152
Would you like to save? (y/n)y
saving...

10.3 predict3

代码同级目录下data2.txt文件:

1,2,3,4
2,4,6,8
5,6,1,2
7,9,0,3

test0712.py 程序:

import tensorflow as tf
import numpy as np
import random
import os
import sys

ifRestartT = False

predictData = None

argt = sys.argv[1:]

for v in argt:
    if v == "-restart":
        ifRestartT = True
    if v.startswith("-file="):#从指定文件中读取数据,predictData会是一个二维数组
        tmpStr = v[len("-file="):]
        print(tmpStr)
        predictData = np.loadtxt(tmpStr, dtype=np.float32, delimiter=",")
        predictRowCount = predictData.shape[0]#获取数组行数
        print("predictRowCount: %s" % predictRowCount)
    if v.startswith("-predict="):
        tmpStr = v[len("-predict="):]
        predictData = [np.fromstring(tmpStr, dtype=np.float32, sep=",")]

print("predictData: %s" % predictData)

trainResultPath = "./save/idcard2"

random.seed()

x = tf.placeholder(tf.float32)
yTrain = tf.placeholder(tf.float32)

w1 = tf.Variable(tf.random_normal([4, 8], mean=0.5, stddev=0.1), dtype=tf.float32)
b1 = tf.Variable(0, dtype=tf.float32)

xr = tf.reshape(x, [1, 4])

n1 = tf.nn.tanh(tf.matmul(xr, w1) + b1)

w2 = tf.Variable(tf.random_normal([8, 2], mean=0.5, stddev=0.1), dtype=tf.float32)
b2 = tf.Variable(0, dtype=tf.float32)

n2 = tf.matmul(n1, w2) + b2

y = tf.nn.softmax(tf.reshape(n2, [2]))

loss = tf.reduce_mean(tf.square(y - yTrain))

optimizer = tf.train.RMSPropOptimizer(0.01)

train = optimizer.minimize(loss)

sess = tf.Session()

if ifRestartT:
    print("force restart...")
    sess.run(tf.global_variables_initializer())
elif os.path.exists(trainResultPath + ".index"):
    print("loading: %s" % trainResultPath)
    tf.train.Saver().restore(sess, save_path=trainResultPath)
else:
    print("train result path not exists: %s" % trainResultPath)
    sess.run(tf.global_variables_initializer())

if predictData is not None:
    for i in range(predictRowCount):
        print(y.eval(session=sess, feed_dict={x: predictData[i]}))

    sys.exit(0)

lossSum = 0.0

for i in range(500000):

    xDataRandom = [int(random.random() * 10), int(random.random() * 10), int(random.random() * 10), int(random.random() * 10)]
    if xDataRandom[2] % 2 == 0:
        yTrainDataRandom = [0, 1]
    else:
        yTrainDataRandom = [1, 0]

    result = sess.run([train, x, yTrain, y, loss], feed_dict={x: xDataRandom, yTrain: yTrainDataRandom})

    lossSum = lossSum + float(result[len(result) - 1])

    print("i: %d, loss: %10.10f, avgLoss: %10.10f" % (i, float(result[len(result) - 1]), lossSum / (i + 1)))

    if os.path.exists("save.txt"):
        os.remove("save.txt")
        print("saving...")
        tf.train.Saver().save(sess, save_path=trainResultPath)

resultT = input('Would you like to save? (y/n)')

if resultT == "y":
    print("saving...")
    tf.train.Saver().save(sess, save_path=trainResultPath)

命令行输入:

e:

cd E:\PycharmProjects\test20190712

python test0712.py -file=data2.txt

结果:

data2.txt
predictRowCount: 4
predictData: [[1. 2. 3. 4.]
 [2. 4. 6. 8.]
 [5. 6. 1. 2.]
 [7. 9. 0. 3.]]
 
loading: ./save/idcard2

[0.4777626 0.5222374]
[0.46356556 0.5364345 ]
[0.99819934 0.0018006 ]
[0.00806343 0.99193656]

从任意字符串中读取数据进行预测

10.4 predict4

代码同级目录下data3.txt文件:

[[1,2,3,4], [2,4,6,8], [5,6,1,2], [7,9,0,3]]

test0712.py 程序:

import tensorflow as tf
import numpy as np
import random
import os
import sys

ifRestartT = False

predictData = None

argt = sys.argv[1:]

for v in argt:
    if v == "-restart":
        ifRestartT = True
    if v.startswith("-file="):
        tmpStr = v[len("-file="):]
        predictData = np.loadtxt(tmpStr, dtype=np.float32, delimiter=",")
        predictRowCount = predictData.shape[0]
        print("predictRowCount: %s" % predictRowCount)
    if v.startswith("-dataFile="):#从指定文件中读取文件全部的内容,作为一个大字符串存入到filStr中去
        tmpStr = v[len("-dataFile="):]
        fileStr = open(tmpStr).read()
        predictData = np.array(eval(fileStr))
        predictRowCount = predictData.shape[0]
        print("predictRowCount: %s" % predictRowCount)
    if v.startswith("-predict="):
        tmpStr = v[len("-predict="):]
        predictData = [np.fromstring(tmpStr, dtype=np.float32, sep=",")]

print("predictData: %s" % predictData)

trainResultPath = "./save/idcard2"

random.seed()

x = tf.placeholder(tf.float32)
yTrain = tf.placeholder(tf.float32)

w1 = tf.Variable(tf.random_normal([4, 8], mean=0.5, stddev=0.1), dtype=tf.float32)
b1 = tf.Variable(0, dtype=tf.float32)

xr = tf.reshape(x, [1, 4])

n1 = tf.nn.tanh(tf.matmul(xr, w1) + b1)

w2 = tf.Variable(tf.random_normal([8, 2], mean=0.5, stddev=0.1), dtype=tf.float32)
b2 = tf.Variable(0, dtype=tf.float32)

n2 = tf.matmul(n1, w2) + b2

y = tf.nn.softmax(tf.reshape(n2, [2]))

loss = tf.reduce_mean(tf.square(y - yTrain))

optimizer = tf.train.RMSPropOptimizer(0.01)

train = optimizer.minimize(loss)

sess = tf.Session()

if ifRestartT:
    print("force restart...")
    sess.run(tf.global_variables_initializer())
elif os.path.exists(trainResultPath + ".index"):
    print("loading: %s" % trainResultPath)
    tf.train.Saver().restore(sess, save_path=trainResultPath)
else:
    print("train result path not exists: %s" % trainResultPath)
    sess.run(tf.global_variables_initializer())

if predictData is not None:
    for i in range(predictRowCount):
        print(y.eval(session=sess, feed_dict={x: predictData[i]}))

    sys.exit(0)

lossSum = 0.0

for i in range(500000):

    xDataRandom = [int(random.random() * 10), int(random.random() * 10), int(random.random() * 10), int(random.random() * 10)]
    if xDataRandom[2] % 2 == 0:
        yTrainDataRandom = [0, 1]
    else:
        yTrainDataRandom = [1, 0]

    result = sess.run([train, x, yTrain, y, loss], feed_dict={x: xDataRandom, yTrain: yTrainDataRandom})

    lossSum = lossSum + float(result[len(result) - 1])

    print("i: %d, loss: %10.10f, avgLoss: %10.10f" % (i, float(result[len(result) - 1]), lossSum / (i + 1)))

    if os.path.exists("save.txt"):
        os.remove("save.txt")
        print("saving...")
        tf.train.Saver().save(sess, save_path=trainResultPath)

resultT = input('Would you like to save? (y/n)')

if resultT == "y":
    print("saving...")
    tf.train.Saver().save(sess, save_path=trainResultPath)

命令行输入:

e:

cd E:\PycharmProjects\test20190712

python test0712.py -dataFile=data3.txt

结果:

predictRowCount: 4
predictData: [[1 2 3 4]
 [2 4 6 8]
 [5 6 1 2]
 [7 9 0 3]]
loading: ./save/idcard2
[0.4777626 0.5222374]
[0.46356556 0.5364345 ]
[0.99819934 0.0018006 ]
[0.00806343 0.99193656]
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值