質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1950閲覧

kerasでloss値がnanになってしまうため,LSTMネットワークの層そのものやコードを確認したい

ayaeri_0527

総合スコア3

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/12/13 13:26

前提

LSTMの勉強のため、pythonでLSTMを用いて株価の予測を行うシステムを作成しています。
従来の「100日間のデータを与えて101日目を予測する」というLSTMではなく,「A~C社の1~100日間のデータを与えてD社の1~100日間の株価を予測する」というLSTMを目標にしております。
現在160社のデータ108日間の長さ130個の説明変数
という三次元配列で学習させようとしていますが,あまり参考にできるサイトがなく,学習で様々な値がnanになっており,非常に苦労しています。
学習率を減らしたり,正規化で0除算が行われていないか等色々調べましたが直らず...
やはり160というデータ数では0から予測を行うLSTMは無理なのでしょうか
また,kerasでLSTMネットワークを構築する時に取り入れるといい層の考え方等はありますでしょうか?

実現したいこと

0から予測を行うLSTMネットワークのnanを直したい

発生している問題・エラーメッセージ

Epoch 1/64 5/5 [==============================] - 8s 571ms/step - loss: nan - mae: nan - val_loss: nan - val_mae: nan ...省略... Epoch 64/64 5/5 [==============================] - 1s 234ms/step - loss: nan - mae: nan - val_loss: nan - val_mae: nan _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_3 (InputLayer) [(None, 108, 130)] 0 lstm_2 (LSTM) (None, 108, 130) 135720 conv1d_2 (Conv1D) (None, 108, 1) 391 ================================================================= Total params: 136,111 Trainable params: 136,111 Non-trainable params: 0 _________________________________________________________________

該当のソースコード

python

1import os 2import numpy as np 3from sklearn.model_selection import train_test_split 4from sklearn import preprocessing 5from matplotlib import pyplot as plt 6import tensorflow as tf 7from tensorflow.keras.layers import Conv1D,LSTM,Dense,Input 8from tensorflow.keras.models import Model 9from tensorflow.keras.utils import plot_model 10import pandas as pd 11 12#シーケンスに沿ったデータを作成する関数-------------------------------------------------------- 13def make_dataset(): 14 for i in range(1,21): 15 for j in range(13,21): 16 path="E:\\最強データ2_フレーム揃え\\喜び_13~20\\Actor_"+str(i)+"\\合体"+str(j)+".csv" 17 df=pd.read_csv(path,index_col=0,header=0) 18 df.pop("AU12_r") 19 yy=df["AU06_r"] 20 df=df.apply(lambda x: (x-x.min())/(x.max() - x.min()), axis=0) 21 yyy=yy.values.astype(float) 22 preprocessing.minmax_scale(yyy) 23 data = df.values.astype(float) 24 25 x.append(data) 26 y.append(yyy) 27 28 return np.array(x), np.array(y) 29 30 31x=list() 32y=list() 33x,y= make_dataset() 34x_train, x_valid, y_train, y_valid = train_test_split(x, y, test_size = 1) 35print("3次元リストの要素数: " + str(len(x))) 36print("3次元リストの中にある2次元リストの要素数: " + str(len(x[1]))) 37print("3次元リストの中にあるリストの要素数: " + str(len(x[0][2]))) 38print("2次元リストの要素数: " + str(len(y))) 39print("2次元リストの中にあるリストの要素数: " + str(len(y[2]))) 40 41#データの種類(160)*データの長さ(108)*説明変数(130) 42inputs=Input(shape=(108,130)) 43x = LSTM(130, return_sequences = True)(inputs) 44x = Conv1D(1, 3, padding = "same", activation = "linear")(x) 45model = Model(inputs, x) 46 47adam=tf.keras.optimizers.Adam(lr=0.01) 48model.compile( 49 optimizer = adam,#最適化アルゴリズム 50 loss = "mse",#損失関数 51 metrics = ["mae"]#評価関数 52) 53 54plot_model(model) 55model.fit( 56 x_train, y_train, 57 epochs = 64, 58 batch_size = 32, 59 validation_data = (x_valid, y_valid) 60) 61print(model.summary()) 62pred = model.predict(x_valid) 63print(pred.shape) 64print(pred[0]) 65

試したこと

loss値のnanを無くすために学習率を減らした。

補足情報(FW/ツールのバージョンなど)

keras 2.10.0
Keras-Preprocessing 1.1.2
tensorflow 2.11.0
tensorflow-estimator 2.10.0
tensorflow-io-gcs-filesystem 0.28.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

PondVillege

2022/12/13 13:47

一応正規化されているようですがmake_dataset()後のx.min(),x.max(),y.min(),y.max()はどのようになっていますか?また,train_test_split(x, y, test_size = 1)とされていることから,x_train.shape, x_valid.shape, y_train.shape, y_valid.shapeも気になります.trainは両方とも0になってしまっていないですか?
ayaeri_0527

2022/12/14 03:18

ご指摘の通り、正規化がうまくいってなかったようです! 正規化の方法を見直したらloss値がちゃんと出てうまくいきました! ありがとうございます!
ayaeri_0527

2022/12/14 03:19

ベストアンサーにしたいのですがこのコメントを解答欄にお願いしてもいいですか?
guest

回答1

0

ベストアンサー

一応正規化されているようですがmake_dataset()後のx.min(),x.max(),y.min(),y.max()はどのようになっていますか?また,train_test_split(x, y, test_size = 1)とされていることから,x_train.shape, x_valid.shape, y_train.shape, y_valid.shapeも気になります.trainは両方とも0になってしまっていないですか?

投稿2022/12/14 07:35

PondVillege

総合スコア1579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問