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

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

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

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

深層学習

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

1回答

4395閲覧

学習済みモデルを使用する keras

yukkys

総合スコア42

Keras

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

深層学習

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

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2018/03/22 06:57

編集2018/03/22 07:18

前提・実現したいこと

下記リンクを元に、kerasのLSTMモデルを使って相場予測のプログラムを書いています。
ディープラーニングで株価予測するときの罠

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

そこで、実運用をするために毎回学習はできないので、学習済みのモデルを試しに使おうとしたのですが、うまく使えていないようです。

#学習込みのコード def read_data(): btcjpy = pd.read_csv("btcjpy_anx_hist.csv") btcjpy = btcjpy.dropna() btcjpy = btcjpy.sort_values("日付け") closes = btcjpy['終値'].values closes = closes.reshape(-1,1) return closes def create_model(): inputs = Input(shape=(5, 1)) x = LSTM(300, activation='relu')(inputs) price = Dense(1, activation='linear', name='price')(x) updown = Dense(1, activation='sigmoid', name='updown')(x) model = Model(inputs=inputs, outputs=[price, updown]) model.compile(loss={ 'price': 'mape', 'updown': 'binary_crossentropy', }, optimizer='adam', metrics={'updown': 'accuracy'}) return model def build_train_test_data(base_data): scaler = StandardScaler() data = scaler.fit_transform(base_data) x_data = [] y_data_price = [] y_data_updown = [] for i in range(len(data) - 5): x_data.append(data[i:i + 5]) y_data_price.append(data[i + 5]) y_data_updown.append(int((base_data[i + 5 - 1] - base_data[i + 5]) > 0)) x_data = np.asarray(x_data).reshape((-1, 5, 1)) y_data_price = np.asarray(y_data_price) y_data_updown = np.asarray(y_data_updown) train_size = int(len(data) * 0.8) x_train = x_data[:train_size] y_train_price = y_data_price[:train_size] y_train_updown = y_data_updown[:train_size] x_test = x_data[train_size:] y_test_price = y_data_price[train_size:] y_test_updown = y_data_updown[train_size:] return x_train, y_train_price, y_train_updown, x_test, y_test_price, y_test_updown, scaler def main(): model = create_model() data = read_data() x_train, y_train_price, y_train_updown, x_test, y_test_price, y_test_updown, scaler = \ build_train_test_data(data) model.fit(x_train, [y_train_price, y_train_updown], validation_data=(x_test, [y_test_price, y_test_updown]), epochs=3, batch_size=10, callbacks=[CSVLogger('train.log.csv')]) model.save('model.h5') with open('scaler.pkl', 'wb') as f: pickle.dump(scaler, f, protocol=pickle.HIGHEST_PROTOCOL) pred = model.predict(x_test)[0][:, 0].reshape(-1) pred = scaler.inverse_transform(pred) y_test_price = scaler.inverse_transform(y_test_price.astype('float64')) y_test_price.reshape(-1,)}) plt.plot(pred, label="pred") plt.plot(y_test_price, label="y_test_price") plt.legend() return pred, y_test_price, x_test

イメージ説明
精度はともかく、予測はしていそうな気がしますが、こちらの予測と別の.pyプログラムから呼び出した場合の予測結果が違うので、何かが間違っているのかなと思います。その別プログラムが↓

# モデルを外部からロードして使用するコード def read_data(): btcjpy = pd.read_csv("btcjpy_anx_hist.csv") btcjpy = btcjpy.dropna() btcjpy = btcjpy.sort_values("日付け") closes = btcjpy['終値'].values closes = closes.reshape(-1,1) return closes def main(): scaler = StandardScaler() with open('scaler.pkl', 'rb') as f: pickle_model = pickle.load(f) inputs = Input(shape=(5, 1)) x = LSTM(300, activation='relu')(inputs) price = Dense(1, activation='linear', name='price')(x) updown = Dense(1, activation='sigmoid', name='updown')(x) model = Model(inputs=inputs, outputs=[price, updown]) model.compile(loss={ 'price': 'mape', 'updown': 'binary_crossentropy', }, optimizer='adam', metrics={'updown': 'accuracy'}) # model = load_model("model.h5") data = read_data() x_data = [] for i in range(len(data) - 5): x_data.append(data[i:i + 5]) x_data = np.asarray(x_data).reshape((-1, 5, 1)) print(input_data) pred = pickle_model.predict(x_data)[0][:, 0].reshape(-1) # pred = scaler.finverse_transform(pred) return pred, data pred, data = main()

イメージ説明

環境

python 3.6.3, keras 2.1.5

ディープラーニング初心者ですがよろしくお願いします。

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

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

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

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

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

guest

回答1

0

自己解決

解決しました。

standard_scalerの使い方が全然わかっていませんでした。
scaler.pklに保存したscalerのためのファイルを使って、データをtransform、その後に使用すれば良いという問題でした。
勉強になりました。

投稿2018/03/22 08:35

yukkys

総合スコア42

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問