LSTMをようやく理解し、実験を進めていたところである障害にぶつかりました。
timstepを広げていくと、データ作成が戻ってこなくなったのです・・・
最初は2~3分だったので、”7万件もあるから時間かかるな”程度だったのですが、10分経っても終わらなくなりました。
そこで色々調べたところ、原因はCSVから読み込んだデータを加工して配列にする際のnumpyの処理速度にあることがわかりました。(コーディングが悪いともいう・・・)
例1:最初のコーディング(配列の追加にnumpy.appendを使っている)
def data_load1(fname, timesteps=1, distance=1):
indata = pd.read_csv(filename)
data = indata[0:][['Close']]
docX = np.array([])
docX = np.append(docX,data[0:timesteps])
for i in range(1, data.shape[0] - (timesteps+distance - 1)):
docX = np.append(docX, data[i:i+timesteps])
docX = np.reshape(docX,(int(docX.shape[0]/timesteps),timesteps,1))
return docX
例2:改善版コーディング(配列の追加に、array.appendを使っている)
def data_load2(fname, timesteps=1, distance=1):
indata = pd.read_csv(filename)
data = np.array(indata[0:][['Close']])
docX = []
docX.append(data[0:timesteps])
for i in range(1, data.shape[0] - (timesteps+distance - 1)):
docX.append(data[i:i+timesteps])
docX = np.array(docX)
docX = np.reshape(docX,(docX.shape[0],docX.shape[1],1))
return docX
上記の2例で、timestetpを変えて実行してみると、こんなに差がでます!!
特にtimestepが大きくなる(時系列方向に深くなる)と圧倒的な差がでます。
これに気付いてから、実験が少し快適になりました!。
まぁ、まだ成果はでていないんですけどね・・・
・回帰にするとそれっぽくできるが、分類にすると全く損失関数が減らない
問題に直面しています。
dtは、分類にして「〇〇上がる確率△△%」とかしたいのです(´・ω・`)