🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら

Q&A

解決済

1回答

293閲覧

TensorFlowのモデル型や入力型や配列など利用方法について

yamayamak

総合スコア131

0グッド

0クリップ

投稿2019/12/13 02:00

TensorFlowを用いてAI解析を行っています。初めて利用するため、ご意見、考え方たアドバイスなどご教授をお願いします。

データのイメージとしては、4*4のデータが720行あるということになります。
例えば温度、湿度、照度、電力などの4個のデータが4場所あり、毎分で6時間(720個)のデータで
今までのデータから数分後の湿度などを予測するようなものだとします。
(データ自体は数年分あり、その過去データに基づいて、過去6時間から数分後の予測する物だとします)
判定したいクラスは湿度5%以上上がる、5%以下下がる、±5%以内の3クラスに分類します。

TensorFlowでFitさせるデータ形式は以下のような感じで考えています。
(0は数年分[6024365*n]のデータをappendしていく予定です。)

Python

1X = np.empty((0, 720, 4, 4), int) 2y = np.array([], int)

このような解析の場合に以下の内容についてご教授をお願いします。

1)モデルについて
まずは畳み込みニューラルネットワークでどこかにある一般的?な以下のモデルで解析してみようと思っていますが、そもそも、(X, 720, 4, 4)のような4次元配列のデータを解析させるモデルとして問題ないでしょうか?
そもそも、畳み込みニューラルネットワークで良いのか?又、その場合にモデルは以下のようなもので問題無いのか?
解析データなどから利用するモデルなどを作る考え方のようなものがあればご教授をお願いします。
そもそもブラックボックスなので解析させてみて精度の良いものを採用するなどの考え方でも良いのでご意見をお願いします。

Python

1model = Sequential() 2model.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) 3model.add(Conv2D(filters=64, kernel_size=(3, 3), activation='relu')) 4model.add(MaxPooling2D(pool_size=(2, 2))) 5model.add(Dropout(0.25)) 6model.add(Flatten()) 7model.add(Dense(units=128, activation='relu')) 8model.add(Dropout(0.5)) 9model.add(Dense(units=n_classes, activation='softmax'))

2)入力型について
温度データなどは少数5桁までの高精度で値がありますが、現在は整数値として保持しています。
int型で解析させようとしていますが、標準はfloatのようですが、float型の方が計算や精度がよくなったりしますでしょうか?
以下の2つのどちらが望ましいでしょうか?どちらでも問題ないでしょうか?

Python

1(1)X = np.empty((0, 720, 4, 4), int) 2(2)X = np.empty((0, 720, 4, 4), float)

3)入力配列について
Appendがうまくいかず、扱いやすく人が感覚的に捉えやすいのは低次元の配列かと思っています。
以下の2つでAI解析に違いはありますでしょうか?
最初に説明しておりますが、データとしては4つの値の4場所というように4つごとに関連があるデータとなります。

Python

1(1)X = np.empty((0, 720, 4, 4), int) 2(2)X = np.empty((0, 720, 16), int)

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

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

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

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

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

guest

回答1

0

ベストアンサー

このAI解析に対する私の提案を述べさせていただきます。

1)モデルについて
取り扱われているデータは各時刻に対して4×4の1ch画像が与えられるような時系列データのような気がします。
また、未来のデータを予測したいので、モデルの出力は同じく4×4の1ch画像データになるようにすればよいと思います。
これを実現するためには、文章生成を行う言語モデルのような構成が必要なので、LSTMなどの再帰的モデルを用いればよいかもしれまん。
Tensorflow2.0には画像データ用のLSTMが用意されているので実装できると思います。(tf.keras.laysers.ConvLSTM2D
ただし、畳み込み計算では画像の空間的に近いところの相関が考慮されるのですが、今取り扱っている画像データは隣り合う数値どうしに空間的な意味はありません。
こういう場合には畳み込みのかわりに注意機構(Attention)というlayerを使ってもよいと思います。
まとめると、各時刻のデータを4×4の1ch画像ととらえる場合、畳み込みもしくは注意機構を用いた再帰的なモデルにより次の時刻のデータを出力するのがよいかと考えられます。

損失関数は、予測された次の時刻のデータと実際のデータに対する二乗誤差でよいでしょう。

2)入力型について
Tensorflowでは、モデル内での計算がどうせfloat32に変換されているそうなので、全部floatでいいかと思われます。(ただし分類問題のラベルなどはint32)

3)入力配列について
各時刻におけるデータサイズが4×4=16と非常に小さいので、4×4の画像ととらえるか、16次元のベクトルととらえるかでそれほど解析結果に違いが出るとは思いません。

また、numpy配列のAppendはpythonのlistのAppendとは違うので(参考サイト)データの読み込み方は、一度すべてのデータをlistで読み込んでからまとめてnumpy配列に変換するか、各データをnumpy配列として読み込んでnumpy.vstack関数で合体させるのがよいと思います。

長くなっていしまいましたが、参考になれば幸いです。

投稿2019/12/13 04:45

tkymtmt

総合スコア143

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

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

yamayamak

2019/12/13 08:09

回答大変ありがとうございます。 非常に参考になる意見も多くあり、是非、活かしていきたいと考えております。 上記、回答大変ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問