【问题标题】:deploying the Tensorflow model in Python在 Python 中部署 TensorFlow 模型
【发布时间】:2019-04-02 06:46:39
【问题描述】:

在实时实施 Tensorflow 模型方面需要帮助。 当我在训练时,一切都运行良好,但是当我继续进行实时预测或预测时,我收到的输出不及格。 我不知道为什么会这样。 我使用了这里的代码参考:https://www.kaggle.com/raoulma/ny-stock-price-prediction-rnn-lstm-gru/notebook 并尝试使用相同的代码来实现或部署,只需少量更改。

见以下代码:

import numpy as np
import pandas as pd
import sklearn
import sklearn.preprocessing
import datetime
import os
import tensorflow as tf

df = pd.read_csv("Realtime_Values.csv", index_col = 0)
df.info()
def load_data(stock,seq_len):

    data_raw = stock.as_matrix() # convert to numpy array
    data = []

    for index in range(len(data_raw) - seq_len): 
        data.append(data_raw[index: index + seq_len])
    #print(len(data))
    data = np.array(data);

    x_forecast = data[:,:-1,:]
    return x_forecast

def normalize_data(df):
    cols = list(df.columns.values)
    min_max_scaler = sklearn.preprocessing.MinMaxScaler()
    df = pd.DataFrame(min_max_scaler.fit_transform(df.values))
    df.columns = cols
    return df
model_path ="modelsOHLC"
seq_len = 9
# parameters
n_steps = seq_len-1 
n_inputs = 4
n_neurons = 100 
n_outputs = 4
n_layers = 4
learning_rate = 0.01
batch_size = 10
n_epochs = 1000
tf.reset_default_graph()

X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.float32, [None, n_outputs])
layers = [tf.contrib.rnn.BasicRNNCell(num_units=n_neurons, activation=tf.nn.elu)
          for layer in range(n_layers)]
multi_layer_cell = tf.contrib.rnn.MultiRNNCell(layers)
rnn_outputs, states = tf.nn.dynamic_rnn(multi_layer_cell, X, dtype=tf.float32)

stacked_rnn_outputs = tf.reshape(rnn_outputs, [-1, n_neurons]) 
stacked_outputs = tf.layers.dense(stacked_rnn_outputs, n_outputs)
outputs = tf.reshape(stacked_outputs, [-1, n_steps, n_outputs])
outputs = outputs[:,n_steps-1,:] # keep only last output of sequence

loss = tf.reduce_mean(tf.square(outputs - y)) # loss function = mean squared error 
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate) 
training_op = optimizer.minimize(loss)
saver = tf.train.Saver()
sess  =tf.Session()
sess.run(tf.global_variables_initializer())    
if(tf.train.checkpoint_exists(tf.train.latest_checkpoint(model_path))):
        saver.restore(sess, tf.train.latest_checkpoint(model_path))
df = normalize_data(df)
x_forecast = load_data(df,seq_len)
y_forecast_pred = sess.run(outputs, feed_dict={X: x_forecast})
print(y_forecast_pred)

谁能帮助我实时运行上述代码而不会出现任何问题?

【问题讨论】:

  • 我没有看到任何用于训练循环的代码。你能添加你的训练循环代码吗?
  • 亲爱的,请阅读我的问题。我有一个可用的 kaggle 链接。你可以从那里看到我的代码。我用于训练、验证和测试的代码相同。但唯一的问题是实时场景的实现。因此,提到了我尝试过的。
  • 您遇到的具体问题是什么?仅仅是您的结果不够准确,还是您以其他方式获得了意外的输出?如果不知道您想要什么,就不可能真正回答您的问题。
  • 是的。在实时场景中,我没有像以前在训练甚至测试中那样获得输出。请让我知道我的实施有什么问题。

标签: python python-3.x tensorflow deployment tensorflow-serving


【解决方案1】:

程序训练模型时,代码可能找不到保存的权重;因此,预测是在未经训练的状态下生成的。您的训练模型代码是:

if (tf.train.checkpoint_exists(tf.train.latest_checkpoint(model_path))):
    saver.restore(sess, tf.train.latest_checkpoint(model_path))

解决这个问题:

  • 添加调试代码如print("checkpoint exists!")

  • 通过调试器在save.restore(...) 之前或之后放置断点以查找要从中恢复的检查点。

  • 查看model_path 以确保您的检查点已正确保存。

【讨论】:

  • 我不认为代码没有找到保存的模型。因为如果代码没有加载保存的模型,那么它如何预测未来的帧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-08
  • 2020-12-24
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2022-08-23
相关资源
最近更新 更多