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

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

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

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

深層学習

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

機械学習

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

Python

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

Q&A

0回答

1156閲覧

LSTMのプログラムの質問(python)

kokekkoko

総合スコア4

Keras

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

深層学習

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

機械学習

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

Python

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

0グッド

0クリップ

投稿2020/02/27 11:10

編集2020/02/29 03:53

現在pythonのkerasでLSTMで2クラス分類を行うプログラムの実装をしています。
入力データは3つの時系列データを1つのエクセルデータに保存し、プログラム上で1つのデータとしてLSTMに入力します。
この3つの時系列データは各エクセルファイルによってデータ長が違うこともあり、input_shapeでエラーが出てしまいます。
入力データのshapeは
(3,161), (3,149),(3, 167), (3, 186)...
などバラバラです。
特に, input_shapeの部分で、どのようにプログラムを変更したら良いか教えていただきたいです。

html

1import numpy as np 2import glob 3import random 4import matplotlib.pyplot as plt 5import numpy as np 6import pandas as pd 7import xlrd 8import tensorflow as tf 9from keras.models import Sequential 10from keras.layers.core import Dense 11from keras.layers.recurrent import LSTM 12from keras.optimizers import Adam 13from sklearn.model_selection import train_test_split 14 15 16###################### 変更パラメータ###################### 17folder = ["file1","file2"] 18input_dim = 2 # 入力データの次元数:実数値3個なので3を指定 19n_hidden = 300 # 隠れ層 20num_epochs=100 # エポック数 21num_batch_size=96 # バッチサイズ 22num_classes = 2 # 識別クラス数 23###################### 変更パラメータ###################### 24 25 26###################### 入力データの最適化 ###################### 27X = [] 28Y = [] 29for index, name in enumerate(folder): 30 dir = "./" + name 31 files = glob.glob(dir + "/*.xlsx") 32 for i, file in enumerate(files): 33 envelope_data = pd.read_excel(file, header=None) 34 data = np.array(envelope_data ) 35 X.append(data) 36 Y.append(i) 37 38# 学習用データとテストデータの分割 39X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.20) 40###################### 入力データの最適化 ###################### 41 42 43output_dim = 1 # 出力データの次元数:同上 44num_hidden_units = 128 # 隠れ層のユニット数 45len_sequence = 200 # 時系列の長さ 46learning_rate = 0.001 # 学習率 47num_training_samples = 1000 # 学習データのサンプル数 48 49 50 51model = Sequential() 52 53model.add(LSTM(32, return_sequences=True, input_shape=(?,?,?))) 54model.add(LSTM(8, return_sequences=True)) 55model.add(Dense(2, activation='softmax')) 56 57###################### モデルの汎化性能評価 ###################### 58# モデルコンパイル 59model.compile(loss='categorical_crossentropy', # 損失の基準は交差エントロピー誤差 60 optimizer='Adam', # 最適化アルゴリズムの選択 61 metrics=['accuracy']) # 学習評価として正解率を指定 62 63# 実行。出力はなしで設定(verbose=0)。 64# 実行。出力ありで設定(verbose=1)。 65history = model.fit(X_train, 66 y_train, 67 batch_size=num_batch_size, # バッチサイズ 68 epochs=num_epochs, # エポック回数 69 verbose=1, 70 validation_data=( 71 X_test, 72 y_test)) 73 74plt.plot(history.history['accuracy']) 75plt.title('model accuracy') 76plt.xlabel('epoch') # x軸のラベルの設定 77plt.ylabel('accuracy') # y軸のラベルの設定 78plt.legend(['acc'], loc='lower right') 79plt.show() 80# テストデータに対するエポック毎のLossとAccuracy 81score = model.evaluate(X_test, y_test, verbose=0) 82 83### 最終エポック時のLossとAccuracy ### 84print('Test Loss:{0:.3f}'.format(score[0])) 85print('Test accuracy:{0:.3}'.format(score[1]))

エラー内容

html

1Input 0 is incompatible with layer lstm_5: expected ndim=3, found ndim=4

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

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

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

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

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

kome_as

2020/02/28 06:10

このコードだけでは回答がしづらいです。 エラーメッセージも正確に提示してください
kokekkoko

2020/02/28 06:15

修正致しました。
kome_as

2020/02/28 07:36 編集

file1と"file2にはどのようなデータが入っていますか? それから、2クラス分類であれば model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='Adam', metrics=['accuracy']) になると思いますが
kokekkoko

2020/02/28 07:44

データによってshapeが違うのですが、例として挙げますと (3,149), (3,186), (3,167), (3,161) などのエクセルファイルです。 なるほど。わかりました、ありがとうございます。 一点だけ質問なのですが、2値分類で最後の全結合層Denseは1でいいのでしょうか?
kome_as

2020/02/28 07:59

すみません、少し勘違いしてたみたいです。 提示されたソースコードのままでも大丈夫です、 sigmoidの場合は0~1の値を一つ取るので出力層は1です
kokekkoko

2020/02/29 03:49

理解できました。ありがとうございます。 入力データの形がバラバラの場合のinput_shapeはどのように記述したら良いのでしょうか?
kome_as

2020/02/29 05:17

shapeが不明な部分は None にするとかですかね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問