2017-12-30 3 views
1

ダイナミックrnnエスティメータをトレーニングしようとしていますが、リグレッサーがデータの正しい形状を特定できないようです。テンソルフローDynamicRnnEstimator - プレフィックスまたはサフィックスがありません

import random 
import numpy as np 
import tensorflow as tf 
from tensorflow.contrib.learn import DynamicRnnEstimator 
from tensorflow.contrib.learn.python.learn.estimators.constants import (
    ProblemType, 
) 
from tensorflow.contrib.learn.python.learn.estimators.rnn_common import (
    PredictionType, 
) 
from tensorflow.contrib.layers import real_valued_column 

X = np.random.uniform(size=(1000, 10)) 
M = X.shape[0] 
N = X.shape[1] 
y = np.random.uniform(size=1000) 

seq_feat_cols = [real_valued_column(column_name='X', dimension=N)] 
rnn = DynamicRnnEstimator(ProblemType.LINEAR_REGRESSION, 
          PredictionType.SINGLE_VALUE, 
          sequence_feature_columns=seq_feat_cols) 

def get_batch(): 
    period_steps = 20 
    start = random.randint(0, (M - 1) - period_steps - 1) 
    end = start + period_steps 
    x_tf = tf.expand_dims(X[start:end], axis=0) 
    return {'X': x_tf}, tf.constant(y[start:end]) 

rnn.fit(input_fn=get_batch, steps=10) 

これは降伏さ:

ValueError: Provided a prefix or suffix of None: 1 and None 

を私は無駄に私のndarrayの両側に次元を拡張しようとしました。どんな提案も大歓迎です!

答えて

1

ValueErrorは、がDynamicRNNEstimatorのコンストラクタに提供されていないためです。その他の問題:

  • 指定したinput_fnは1回のみ実行されます。そのため、TensorFlowグラフを作成して、データセットを反復処理するか、ランダムなTensorFlow操作を行う必要があります。
  • timestepごとに1つのラベルがあるようですが、予測タイプにSINGLE_VALUEではなくMULTIPLE_VALUEが必要と思われます。
  • 推定バッチ寸法(それが1であることができる)

は、そのすべてを一緒に置く期待:

import random 
import numpy as np 
import tensorflow as tf 
from tensorflow.contrib.learn import DynamicRnnEstimator 
from tensorflow.contrib.learn.python.learn.estimators.constants import (
    ProblemType, 
) 
from tensorflow.contrib.learn.python.learn.estimators.rnn_common import (
    PredictionType, 
) 
from tensorflow.contrib.layers import real_valued_column 

X = np.random.uniform(size=(1000, 10)) 
M = X.shape[0] 
N = X.shape[1] 
y = np.random.uniform(size=1000) 

seq_feat_cols = [real_valued_column('X')] 
rnn = DynamicRnnEstimator(ProblemType.LINEAR_REGRESSION, 
          PredictionType.MULTIPLE_VALUE, 
          num_units=5, 
          sequence_feature_columns=seq_feat_cols) 

def get_batch(): 
    period_steps = 20 
    start = tf.random_uniform(
     shape=(), 
     minval=0, 
     maxval=(M - 1) - period_steps - 1, 
     dtype=tf.int32) 
    end = start + period_steps 
    x_sliced = tf.constant(X)[None, start:end, :] 
    y_sliced = tf.constant(y)[None, start:end] 
    x_sliced.set_shape((1, period_steps, N)) 
    y_sliced.set_shape((1, period_steps)) 
    return {'X': x_sliced}, y_sliced 

rnn.fit(input_fn=get_batch, steps=10) 
関連する問題