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

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

ただいまの
回答率

87.36%

RNNでのラベル付きデータの入力

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 1,426

score 9

センサーから取得したデータをRNNに入力し、2つのラベルに分類をしたいです。
データはExcelでセンサーの種類64種類、各1000フレーム程取得されたものが44人分のデータがあります。
これをAとBのラベルを付けたいのですがバッチの取り方、ラベルのつけ方がわかりません。

コードはゼロから作るDeepLearning2を参考にしました。
パープレキシティの評価とありますがまずは入力を行いたいので無視しています。
教師は(0,1)(1,0)の2つのラベルにし
データの形式は画像の形ですこれが22×2ラベル分ありますイメージ説明

# coding: utf-8
import sys
sys.path.append('..')
import matplotlib.pyplot as plt
import numpy as np
from optimizer import SGD
#import dataset
from simple_rnnlm import SimpleRnnlm
import pandas as pd


# ハイパーパラメータ設定
batch_size = 30 # ストロークの半分 60じゃだめ言われたから
sensor = 64
hidden_size = 15
time_size = 5 # Truncated BPTTの展開する時間サイズ
lr = 0.1 # 学習率
max_epoch = 100

# 学習データの読み込み
data = pd.read_csv('tt.csv')
dataframe = np.array(data)

label = 2
data_size = 1000 # とりあえず一人分だから

xs = dataframe
teach = pd.read_csv('testteach.csv')
ts =teach
print(ts.shape)

# 学習時に使用する変数
max_iters = data_size // (batch_size * time_size)
time_idx = 0
total_loss = 0
loss_count = 0
ppl_list = []

# モデルの生成
model = SimpleRnnlm(label, sensor, hidden_size)
optimizer = SGD(lr)


# ミニバッチの各サンプルの読み込み開始位置を計算
jump = (data_size - 1) // batch_size
offsets = [i * jump for i in range(batch_size)]

for epoch in range(max_epoch):
    for iter in range(max_iters):
        # ミニバッチの取得
        batch_x = np.empty((batch_size, time_size, sensor), dtype='i')

        batch_t = np.empty((batch_size, time_size, label), dtype='i')
        #print(batch_t.shape)       30, 5
        for t in range(time_size):
            for i, offset in enumerate(offsets):
                batch_x[i, t, :] = xs[(offset + time_idx) % data_size, :]
                #print(batch_x[i, t])
                batch_t[i, t, :] = ts[(offset + time_idx) % data_size]
                print(batch_t.shape)
                print(batch_t[i, t, :])
            time_idx += 1
"""
        # 勾配を求め、パラメータを更新
        loss = model.forward(batch_x, batch_t)
        model.backward()
        optimizer.update(model.params, model.grads)
        total_loss += loss
        loss_count += 1

    # エポックごとにパープレキシティの評価
    ppl = np.exp(total_loss / loss_count)
    print('| epoch %d | perplexity %.2f'
          % (epoch+1, ppl))
    #print(len(corpus))
    ppl_list.append(float(ppl))
    total_loss, loss_count = 0, 0

# グラフの描画
x = np.arange(len(ppl_list))
plt.plot(x, ppl_list, label='train')
plt.xlabel('epochs')
plt.ylabel('perplexity')
plt.show()
"""
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る