LSTM
을 사용하여 RNN
을 만들려고합니다. LSTM
모델을 만들고, 그 후에는 DNN
네트워크가 있고 회귀 출력 레이어가 하나 있습니다.Tensorflow에서 LSTM의 재사용 변수 재사용
나는 내 데이터를 훈련 받았고 최종 훈련 손실은 약 0.009
이되었습니다. 그러나 모델을 테스트 데이터에 적용하면 손실은 약 0.5
이됩니다.
1 차 신기원 훈련 손실은 약 0.5
입니다. 그래서 훈련 된 변수는 테스트 모델에 사용되지 않는다고 생각합니다.
교육 및 테스트 모델 간의 유일한 차이점은 배치 크기입니다. Trainning Batch = 100~200
, Test Batch Size = 1
.
주요 기능 i에서 LSTM
인스턴스를 만들었습니다. LSTM
innitializer에서 모델이 만들어진다. LSTM 위 LSTM 인스턴스 아래 초기화를 사용
def __init__(self,config,train_model=None):
self.sess = sess = tf.Session()
self.num_steps = num_steps = config.num_steps
self.lstm_size = lstm_size = config.lstm_size
self.num_features = num_features = config.num_features
self.num_layers = num_layers = config.num_layers
self.num_hiddens = num_hiddens = config.num_hiddens
self.batch_size = batch_size = config.batch_size
self.train = train = config.train
self.epoch = config.epoch
self.learning_rate = learning_rate = config.learning_rate
with tf.variable_scope('model') as scope:
self.lstm_cell = lstm_cell = tf.nn.rnn_cell.LSTMCell(lstm_size,initializer = tf.contrib.layers.xavier_initializer(uniform=False))
self.cell = cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * num_layers)
with tf.name_scope('placeholders'):
self.x = tf.placeholder(tf.float32,[self.batch_size,num_steps,num_features],
name='input-x')
self.y = tf.placeholder(tf.float32, [self.batch_size,num_features],name='input-y')
self.init_state = cell.zero_state(self.batch_size,tf.float32)
with tf.variable_scope('model'):
self.W1 = tf.Variable(tf.truncated_normal([lstm_size*num_steps,num_hiddens],stddev=0.1),name='W1')
self.b1 = tf.Variable(tf.truncated_normal([num_hiddens],stddev=0.1),name='b1')
self.W2 = tf.Variable(tf.truncated_normal([num_hiddens,num_hiddens],stddev=0.1),name='W2')
self.b2 = tf.Variable(tf.truncated_normal([num_hiddens],stddev=0.1),name='b2')
self.W3 = tf.Variable(tf.truncated_normal([num_hiddens,num_features],stddev=0.1),name='W3')
self.b3 = tf.Variable(tf.truncated_normal([num_features],stddev=0.1),name='b3')
self.output, self.loss = self.inference()
tf.initialize_all_variables().run(session=sess)
tf.initialize_variables([self.b2]).run(session=sess)
if train_model == None:
self.train_step = tf.train.GradientDescentOptimizer(self.learning_rate).minimize(self.loss)
이 만들어집니다.
with tf.variable_scope("model",reuse=None):
train_model = LSTM(main_config)
with tf.variable_scope("model", reuse=True):
predict_model = LSTM(predict_config)
이 개 LSTM
인스턴스를 한 후, 나는 train_model
을 훈련했다. 그리고 predict_model
에 테스트 세트를 입력했습니다.
왜 변수를 다시 사용하지 않습니까?