本节涉及点:

  1. 从命令行参数读取需要预测的数据
  2. 从文件中读取数据进行预测
  3. 从任意字符串中读取数据进行预测

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

训练神经网络是让神经网络具备可用性,真正使用神经网络时,需要对新的输入数据进行预测,

这些输入数据 不像训练数据那样是有目标值(标准答案),而是需要通过神经网络计算来获得预测的结果。

通过命令行参数输入数据:

import numpy as np
import sys predictData = None
argt = sys.argv[1:] # 获取命令行参数后循环判断每一个参数,并寻找是否有以“-predict=” 为开始的字符串
# 使用成员函数 startswith 判断是否以另一个指定的字符串开头
# 如果有,去掉 "-predict=" 这个前缀,只取后面剩余的字符串
# tmpStr = v[len("-predict=")] 作用是让 tmpStr 等于命令行参数v 去掉开头 "-predict=" 后的字符
# len() 的作用是 获得任意字符串的长度
# 使用 numpy包中的 fromstring 函数,把 tmpStr 中字符串转换为一个数组
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)

运行结果如下:

使用 Anaconda 执行该程序:

# numpy 字符串转变为数组函数 np.fromstring(tmpStr,dtype=np.float32,sep=",")   

是指将字符串 tmpStr,以字符 "," 为分隔符,转换为数组内数据项的数据类型是 float32 的数组

调用训练好的神经网络进行预测:

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) # 终止程序


# 如果 predictData 的数据 是 “None” ,则继续训练
# 否则说明已经从命令行参数中读取了需要预测的数据,那么就调用神经网络进行预测,输出结果 结束程序
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)

print(y.eval(session=sess, feed_dict={x: predictData}))

直接调用张量 y 的 eval 函数,并在命名参数 session 中传入 会话对象 sess,在命名参数 feed_dict 中传入需要预测的输入数据,就可以得到y 的计算结果

注意: 用神经网络计算,不需要传入目标值 yTrain ,也不需要在 sess.run 函数的结果数组中指定训练变量 trian

二、从文件中读取数据进行预测

假设在 程序执行目录下有此文件 :

import tensorflow as tf
import numpy as np
import random
import os
import sys ifRestartT = False predictData = None argt = sys.argv[1:]
# 同样,先获取命令行参数,从前忘后遍历,如果有 “-file=” ,会从该参数指定的文件中读取数据
# 读取数据后放进 predictData 中,但此时, predictData 会是一个二维数组,其中每一行代表文件中的一行数据
# 为了保持一致,我们把用命令行参数 "-predict=" 指定的预测输入数据也套上了一个方括号变成二维数组【虽然只有一行】
# 使用 predictData.shape[0] 获取二维数组的行数
# 因为数组的形态本身也是一个数组,其中下标为 0 的数字代表了它的行数
for v in argt:
if v == "-restart":
ifRestartT = True
if v.startswith("-file="):
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)
# 用一个循环,把 predictData 中的所有行的数据都输入神经网络中计算一边,最后输出结果
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)

就可以 程序从 data2.txt 中获取了数据并转换成为一个二维数组,神经网络载入训练的过程数据后,根据当时的可变参数取值对每一行数据进行了预测

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

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

上方是 python 中定义数组的写法,那么可以用 python 提到的 eval 函数把这个 字符串转换成为想要的数组类型。

假设有一个文本文件,data3.txt 且 有且仅有 上述字符串作为文件内容,编程实现,从文件中读取数据进行预测 :

import tensorflow as tf
import numpy as np
import random
import os
import sys ifRestartT = False predictData = None argt = sys.argv[1:]
# 如果制定了命令行参数 "-datafile=”,程序就从指定的文件中读取文件的全部内容
# 也就是把文件中的内容作为一个大字符串整个读进变量 fileStr 中
# open 函数是 python 中用于打开指定位置文件的函数,会返回一个文件对象
# 调用该文件对象的 read 函数,就可以把文本文件的内容都读进来
# 再调用 eval 函数把这个字符串转换为 python 的数据对象
# 这里,python 会把它转换成一个 list 对象,直接用 numpy 的 array 函数就可以把它转换为数组 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="):
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)

执行程序:

当然,这里的格式也符合网络间传递数据的最常用的格式之一: JSON

Tensorflow 用训练好的模型预测的更多相关文章

  1. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过 ...

  2. 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 直接调用 C++ 接口实现

    现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过直 ...

  3. 转载:tensorflow保存训练后的模型

    训练完一个模型后,为了以后重复使用,通常我们需要对模型的结果进行保存.如果用Tensorflow去实现神经网络,所要保存的就是神经网络中的各项权重值.建议可以使用Saver类保存和加载模型的结果. 1 ...

  4. Tensorflow使用训练好的模型进行测试,发现计算速度越来越慢

    实验时要对多个NN模型进行对比,依次加载直到第8个模型时,发现运行速度明显变慢而且电脑开始卡顿,查看内存占用90+%. 原因:使用过的NN模型还会保存在内存,继续加载一方面使新模型加载特别特别慢,另一 ...

  5. tensorflow使用pb文件进行模型预测

  6. 如何用Tensorflow训练模型成pb文件和和如何加载已经训练好的模型文件

    这篇薄荷主要是讲了如何用tensorflow去训练好一个模型,然后生成相应的pb文件.最后会将如何重新加载这个pb文件. 首先先放出PO主的github: https://github.com/ppp ...

  7. TensorFlow 调用预训练好的模型—— Python 实现

    1. 准备预训练好的模型 TensorFlow 预训练好的模型被保存为以下四个文件 data 文件是训练好的参数值,meta 文件是定义的神经网络图,checkpoint 文件是所有模型的保存路径,如 ...

  8. TensorFlow从1到2(七)线性回归模型预测汽车油耗以及训练过程优化

    线性回归模型 "回归"这个词,既是Regression算法的名称,也代表了不同的计算结果.当然结果也是由算法决定的. 不同于前面讲过的多个分类算法或者逻辑回归,线性回归模型的结果是 ...

  9. tensorflow数据加载、模型训练及预测

    数据集 DNN 依赖于大量的数据.可以收集或生成数据,也可以使用可用的标准数据集.TensorFlow 支持三种主要的读取数据的方法,可以在不同的数据集中使用:本教程中用来训练建立模型的一些数据集介绍 ...

随机推荐

  1. unreal 抓mobile 管线

    把renderdoc挂到生成的exe上 用命令行 “路径\xx.uproject” scenename -game -FeatureLevelES31 -windowed -resx=1920 -re ...

  2. 《SVG精髓》笔记(一)

    本文是基于<SVG精髓>一书的简单总结,文中的demo均为该书提供,目的是方便大家使用时快速查阅. 1. 坐标系统 视口(viewport):文档使用的画布区域,表示SVG可见区域的大小, ...

  3. 关于topN问题的几种解决方案

    在系统中,我们经常会遇到这样的需求:将大量(比如几十万.甚至上百万)的对象进行排序,然后只需要取出最Top的前N名作为排行榜的数据,这即是一个TopN算法.常见的解决方案有三种: (1)直接使用Lis ...

  4. 题解 [51nod1161] Partial Sums

    题面 解析 我们设\(f[i]\)表示\(k\)次操作后第一个数在第\(i\)个位置上加了多少次, 而其它的数也可以类推, 第\(i\)个数在第\(j\)个位置加的次数就是\(f[j-i+1]\). ...

  5. Codeforces Round #454 Div. 1 [ 906A A. Shockers ] [ 906B B. Seating of Students ] [ 906C C. Party ]

    PROBLEM A. Shockers 题 http://codeforces.com/contest/906/problem/A 906A 907C 解 水题,按照题意模拟一下就行了 如果是 ‘ ! ...

  6. React组件式编程Demo-用户的增删改查

    1.项目结构 项目是基于webpack4, 参考 创建基本的webpack4.x项目 2.页面效果 初始化效果

  7. Java设计模式-策略模式实际应用场景

    容错恢复机制        容错恢复机制是应用程序开发中非常常见的功能.那么什么是容错恢复呢?简单点说就是:程序运行的时候,正常情况下应该按照某种方式来做,如果按照某种方式来做发生错误的话,系统并不会 ...

  8. Word:自动编号超过9后缩进太大

     造冰箱的大熊猫,本文适用于Microsoft Office 2007@cnblogs 2019/7/30 文中图片可通过点击鼠标右键查看大图 1.场景 如下图所示,使用Word的自动编号功能时,当编 ...

  9. javascript数据结构之顺序表

    关于线性表的概念这里就不赘述了,可以自行百度和查阅资料,线性表按照存储(物理)结构分为顺序存储和链式存储,每种存储方式的不同决定了它的实现代码是不同的: 顺序存储的特点就是在内存中选一块连续的地址空间 ...

  10. CodeForces–830B--模拟,树状数组||线段树

    B. Cards Sorting time limit per test 1 second memory limit per test 256 megabytes input standard inp ...