前提・実現したいこと
時系列データに対して1次元畳み込みを行い、LSTMを用いて多クラス分類を行いたい。
下記の論文のFig.1に示されているネットワーク構造を一部改良したいと考えています。
https://arxiv.org/pdf/1703.04046.pdf
発生している問題・エラーメッセージ
問題になる以前の質問なのですが、
- 512Hzで1時間10分サンプリングしたデータ(入力)に対して0.05Hzで1時間10分サンプリングしたラベルが存在する(同様のデータが10個あります)
- 入力データに対して1次元畳み込みを行い、ラベルと同じサンプリングで結果を出力したい(シーケンス出力を実装したい)
- 1つずつのデータに対して時系列性を担保しながら学習を進めたい(データセットの構築がわからないです)
試したこと
上記のデータ1つに対してLSTMを実装してみました。
しかし、このデータは1時間10分のデータを20sec毎にデータを分割し、その中の時系列性を学習していると思います。
これだと各ラベル毎の学習になってしまうと思っているのですが、いかがでしょうか。
Python
1import numpy as np 2import matplotlib.pyplot as plt 3import tensorflow as tf 4import csv 5import datetime 6 7# GPU設定 8config = tf.compat.v1.ConfigProto() 9config.gpu_options.allow_growth = True 10session = tf.compat.v1.InteractiveSession(config=config) 11 12ecgData = [] 13sleepData = [] 14with open('./data/ECG.csv') as f: 15 reader = csv.reader(f) 16 for row in reader: 17 ecgData.append(float(row[0])) 18 19with open('./data/label.csv',encoding="utf-8-sig") as f: 20 reader = csv.reader(f) 21 for row in reader: 22 labelData.append(int(row[0])-1) 23 24# データ長の統一 25# ecgDataは512Hz * 70min * 60secで2150400個 26ecgData = ecgData[1:2150401] 27 28# labelデータは0.05Hz * 70min * 60secで210個 29# 初期値が入っているのでそのデータは無視 30labelData = labelData[1:212] 31 32# numpy配列に変換 33ecgData = np.array(ecgData) 34labelData = np.array(labelData) 35 36train_X = np.reshape(ecgData, (-1, 512*20, 1)) 37train_Y = np.identity(4)[labelData] 38 39# モデルの作成 40model = tf.keras.models.Sequential() 41model.add(tf.keras.layers.LSTM(10, input_shape = (train_X.shape[1], train_X.shape[2]), return_sequences=False, activation='tanh')) 42model.add(tf.keras.layers.Dense(4)) 43model.add(tf.keras.layers.Activation('softmax')) 44 45model.compile(loss = "mean_squared_error", optimizer='adam') 46 47model.summary() 48epochs = 100 49history = model.fit(train_X, train_Y, validation_split=0.1, epochs=epochs,callbacks=[tensorboard_callback]) 50
補足情報(FW/ツールのバージョンなど)
Windows 10
Python 3.6
tensorflow-gpu 2.1.0
CUDA v10.1
cuDNN 7.6.5
「時系列性を担保」とはどういうことでしょうか
あなたの回答
tips
プレビュー