如果使用shuffle_batch在tensorflow中训练模型,如何对一条数据记录进行预测

如果使用shuffle_batch在tensorflow中训练模型,如何对一条数据记录进行预测,tensorflow,Tensorflow,我用CNN训练了一个模型,用shuffle\u batch处理大数据文件,在训练前我设置了一个64的批大小。似乎批量大小在训练期间或训练之后都无法改变,那么如何使用训练后的模型在固定批量的情况下仅对一条数据记录进行预测 用于批量大小的占位符,代码如下: def列(目标路径,语音处理器): 使用tf.Graph()作为默认值(): **batch\u size=tf.placeholder(tf.int32,name='batch\u size')** 数据批,标签批=从记录中读取数据(目标路径,

我用CNN训练了一个模型,用shuffle\u batch处理大数据文件,在训练前我设置了一个64的批大小。似乎批量大小在训练期间或训练之后都无法改变,那么如何使用训练后的模型在固定批量的情况下仅对一条数据记录进行预测

用于批量大小的占位符,代码如下:

def列(目标路径,语音处理器):
使用tf.Graph()作为默认值():
**batch\u size=tf.placeholder(tf.int32,name='batch\u size')**
数据批,标签批=从记录中读取数据(目标路径,批大小)
会话_conf=tf.confproto(
允许软放置=标志。允许软放置,
log\u device\u placement=标志。log\u device\u placement)
sess=tf.Session(config=Session\u conf)
使用sess.as_default():
cnn=TextCNN(
序列长度=数据批次形状[1],
num\u classes=label\u batch.shape[1],
vocab_size=len(vocab_处理器词汇表),
嵌入大小=标志。嵌入大小,
filter_size=list(映射(int,FLAGS.filter_size.split(“,”)),
num_filters=FLAGS.num_filters,
输入\u x=数据\u批次,
输入\ y=标签\批次,
l2_reg_lambda=FLAGS.l2_reg_lambda
)
#定义培训程序
全局步骤=tf.变量(0,name=“全局步骤”,可训练=False)
优化器=tf.列AdamOptimizer(1e-3)
grads_和_vars=优化器。计算梯度(cnn.loss)
训练=优化器。应用梯度(梯度和变量,全局步长=全局步长)
#跟踪渐变值和稀疏度(可选)
毕业总结=[]
对于g,v在梯度和变量中:
如果g不是无:
grad_hist_summary=tf.summary.histogram(“{}/grad/hist.”格式(v.name),g)
稀疏度_summary=tf.summary.scalar(“{}/grad/sparsity.”格式(v.name),tf.nn.zero_分数(g))
grad\u summaries.append(grad\u hist\u summary)
渐变汇总。追加(稀疏汇总)
grad\u summaries\u merged=tf.summary.merge(grad\u summaries)
#模型和摘要的输出目录
timestamp=str(int(time.time()))
out_dir=os.path.abspath(os.path.join(os.path.curdir,“runs”,时间戳))
打印(“写入{}\n.format(out\u dir))
#损失和准确性摘要
损失汇总=tf.summary.scalar(“损失”,cnn.loss)
acc_summary=tf.summary.scalar(“准确度”,cnn.Accurance)
#列车摘要
列车汇总表op=tf.summary.merge([损失汇总表、acc汇总表、梯度汇总表合并])
train\u summary\u dir=os.path.join(out\u dir,“summaries”,“train”)
train\u summary\u writer=tf.summary.FileWriter(train\u summary\u dir,sess.graph)
#检查点目录。Tensorflow假设这个目录已经存在,所以我们需要创建它
checkpoint\u dir=os.path.abspath(os.path.join(out\u dir,“checkpoints”))
checkpoint\u prefix=os.path.join(checkpoint\u dir,“model”)
如果操作系统路径不存在(检查点目录):
os.makedirs(检查点目录)
saver=tf.train.saver(tf.global\u variables(),max\u to\u keep=FLAGS.num\u检查点)
init=tf.group(tf.global_variables_initializer(),
tf.local_variables_initializer())
sess.run(初始化)
#sess=tf_debug.LocalCLIDebugWrapperSession(sess)
coord=tf.train.Coordinator()
线程=tf.train.start\u queue\u runner(sess=sess,coord=coord)
尝试:
当不协调时,是否应停止()
**馈送地址={
美国有线电视新闻网,辍学,辍学,辍学,辍学,辍学,
批量:64
}**
_,步骤,总结,损失,准确度=sess.run(
[train_op,global_step,train_summary_op,cnn.loss,cnn.Accurance],feed_dict)
time\u str=datetime.datetime.now().isoformat()
打印(“{}:step{},loss{:g},acc{:g}”。格式(time_str,step,loss,acc)
培训总结作者。添加总结(总结,步骤)
当前步骤=tf.训练.全局步骤(sess,全局步骤)
如果当前_步骤%FLAGS.checkpoint_every==0:
path=saver.save(sess、检查点前缀、全局步骤=当前步骤)
打印(“将模型检查点保存到{}\n”。格式(路径))
除了tf.errors.OutOfRangeError:
打印(“完成培训”)
最后:
协调请求停止()
坐标连接(线程)
sess.close()
错误:

回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/Documents/code/error classify/cnn\u classify/test\u train.py”,第247行,在
列车(TFU记录器路径、语音处理器)
文件“/home/ubuntu/Documents/code/error classify/cnn\u classify/test\u train.py”,第82行,列车中
num_线程数=2)
文件“/home/ubuntu/.pyenv/versions/3.5.3/lib/python3.5/site packages/tensorflow/python/training/input.py”,第1220行,在shuffle\u批处理中
名称=名称)
文件“/home/ubuntu/.pyenv/versions/3.5.3/lib/python3.5/site-packages/tensorflow/python/training/input.py”,第765行,在“shuffle”批处理中
如果容量
您可以用占位符替换固定的批量大小,在进行培训时将占位符设置为64,并在推断时设置为所需的任何值

batch\u size=tf.placeholder(tf.int32,(),name=“batch\u size”)
tf.train.shuffle\u批次(…,批次大小=批次大小…)

使用此设置解决了问题
允许更小\u fina