我正在尝试创建一个使用时间序列(UNIX纪元时间)和值生成预测的脚本。为了美学目的,我正在为脚本的每个部分创建不同的方法。这是一个例子:
def train_model(X_data, y_data):
# Creating placeholders X and y
# Creating optimizer and init variables
with tf.Session() as sess:
init.run()
for epoch in range(200):
for (xh, yh) in zip(X_data, y_data):
sess.run(optimizer, feed_dict={X: xh, y: yh})
# Is it possible to return the trained model in a variable?
def make_pred(model, date):
# Use the previous model to generate a prediction?
with tf.Session() as sess:
return sess.run(model, feed_dict={X: date})
如何使用在函数generate_model
中创建的模型而不将其保存在检查点文件中?
奖金问题:
我对此很陌生,如果你看到任何不合适的条款,请不要犹豫,纠正我。
提前谢谢。
答案 0 :(得分:2)
如何使用在generate_model函数中创建的模型而不将其保存在检查点文件中?
将您的功能更改为一个类,并在类中保持会话活动
class MyModel:
def __init__(self):
self.sess = tf.Session()
init.run()
def train_model(self, X_data, y_data):
# Creating placeholders X and y
for epoch in range(200):
for (xh, yh) in zip(X_data, y_data):
sess.run(optimizer, feed_dict={X: xh, y: yh})
def make_pred(self, date):
# Use the previous model to generate a prediction yp
return sess.run(yp, feed_dict={X: date})
使用model = MyModel()
创建您的课程的实例,然后像model.train_model(X_data,y_data)
一样训练它,并像model.make_pred(date)
一样使用它。
当学习率为0.001时,模型无法生成预测,并且我必须使用接近1e-20的值才能在我的日志中看到除NaN之外的其他内容。这是因为我没有缩放时间序列数组吗?什么是扩展它们的最佳方法?
选择合适的学习率是调整超级参数的一个重要方面,并且在学习率过高的情况下获得NaN(或其他不适当的值)的情况并不少见。
如果您可以缩放时间序列以进行标准化,那肯定会有所帮助。尝试将系列缩放到介于0.0和1.0或-1.0和1.0之间,无论什么都是最有意义的。
扩展它们的最佳方法取决于数据。如果您的时间序列在室外温度(例如)之间并且在-20C和+ 20C之间,那么可能只是T / 20(除以20)来标准化它会很棒。如果你的时间序列是恒星气体的宇宙温度,范围在-270C到50,000C之间,那么log(T)可能更好地得到温度的大小
由于我没有很多训练数据,我应该使用整套训练吗?当我的值小于100时,交叉验证集如何工作?
假设您有100个列车数据点。您可以制作一个预测器,使用前20个数据点进行测试,其余的用于训练。然后,您可以制作另一个预测器,使用第二个20个数据点进行测试,另外80个用于训练,依此类推,以便您有5个经过单独训练和测试的预测变量。这将是 5折交叉测试。您知道每个预测变量的报告测试结果,并且您有5个预测变量(如果使用N个折叠,则为N)。
当您使用预测变量时,您将通过每个预测变量运行新数据并进行5次估算。现在,您可以从您的迷你专家系列中获得可能的答案范围。您可以报告答案的平均值,RMS,高和低。所有重要信息。