Tensorflow 为什么在求值函数中添加num_epochs

Tensorflow 为什么在求值函数中添加num_epochs,tensorflow,Tensorflow,我是tensorflow的新手,这是第一个教程,下面给出了代码。我的问题是为什么train\u input\u fn和eval\u input\u fn变量是使用num\u epochs属性创建的。它们只用于评估,所以我认为没有必要运行相同的测试10000次 谢谢 将tensorflow导入为tf #NumPy通常用于加载、操作和预处理数据。 将numpy作为np导入 导入日志记录 logging.getLogger(“tensorflow”).setLevel(logging.WARNING)

我是tensorflow的新手,这是第一个教程,下面给出了代码。我的问题是为什么
train\u input\u fn
eval\u input\u fn
变量是使用num\u epochs属性创建的。它们只用于评估,所以我认为没有必要运行相同的测试10000次

谢谢

将tensorflow导入为tf
#NumPy通常用于加载、操作和预处理数据。
将numpy作为np导入
导入日志记录
logging.getLogger(“tensorflow”).setLevel(logging.WARNING)
#声明特性列表。我们只有一个数字特征。有很多
#更复杂、更有用的其他类型的列。
特征列=[tf.特征列.数字列(“x”,形状=[1])]
#估计器是调用训练(拟合)和评估的前端
#(推论)。有许多预定义类型,如线性回归,
#线性分类,以及许多神经网络分类器和回归器。
#下面的代码提供了一个进行线性回归的估计器。
估计器=tf.估计器.线性累加器(特征列=特征列)
#TensorFlow提供了许多辅助方法来读取和设置数据集。
#这里我们使用两个数据集:一个用于培训,一个用于评估
#我们必须告诉函数有多少批
#我们需要的数据数量(数量)以及每批数据的大小。
x_列=np.数组([1,2,3,4])
y_列=np.数组([0.,-1.,-2.,-3.)
x_eval=np.数组([2,5,8,1])b
y_eval=np.array([-1.01,-4.1,-7,0.])
输入\u fn=tf.estimator.inputs.numpy\u输入\u fn(
{“x”:x_train},y_train,批处理大小=4,num_epochs=None,shuffle=True)
#为什么是新纪元?
列车输入=tf.estimator.inputs.numpy输入(
{“x”:x_train},y_train,批量大小=4,次数=10000,随机播放=False)
#为什么是新纪元?
eval\u input\u fn=tf.estimator.inputs.numpy\u input\u fn(
{“x”:x_eval},y_eval,批处理大小=4,num_epochs=10000,shuffle=False)
#通过调用该方法并传递
#训练数据集。
估算器.序列(输入=输入,步数=1000)
#在这里,我们评估我们的模型做得有多好。
训练度量=估计器。评估(输入=训练输入,步骤=1)
评估指标=估计器。评估(输入=评估输入,步骤=1)
打印('列车评估时间',t2-t1)
打印('测试评估时间',t3-t2)
打印(“列车指标:%r”%train\u指标)
打印(“评估指标:%r”%eval\u指标)

num_epoch
用于迭代数据的最大容量


在您的例子中,培训数据中只有4个示例,并且批大小为4,因此每个历元只能执行一个步骤。一步之后,如果
num_epoch=1,它将引发
tf.errors.OutOfRangeError
,因为您的数据只能循环一次。您在代码中执行了1000个步骤,因为您设置了
num_epoch=None
,这意味着它允许无限迭代。

num_epoch
用于迭代数据的最大容量


在您的例子中,培训数据中只有4个示例,并且批大小为4,因此每个历元只能执行一个步骤。一步之后,如果
num_epoch=1,它将引发
tf.errors.OutOfRangeError
,因为您的数据只能循环一次。您在代码中执行了1000个步骤,因为您设置了
num\u epoch=None
,这意味着它允许无限迭代。

对!对于评估,您只需要
num\u epochs=1
对!对于评估,您只需要
num_epochs=1