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

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

ただいまの
回答率

90.52%

  • Python

    7953questions

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

  • TensorFlow

    673questions

  • CSV

    635questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

csv形式の時系列データをRNNによってクラス分類したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 693

okoy

score 1

前提・実現したいこと

csv形式の複数の時系列データをRNNによってクラス分類したいです。
下記のサイトでは、

http://docs.fabo.io/tensorflow/model_sequence/rnn_basic.html

3種類のランダムな波形を作っていますが、実現したいこととしては、
用意した3種類のcsvの時系列のデータ(それぞれのcsvの列毎に計測回数分のデータがあります。下記は1つのファイル内のイメージです)を読み込み、分類したいと考えています。
イメージ説明

よろしくお願いいたします。

該当のソースコード

from future import absolute_import
from future import division
from future import print_function

import random
import numpy as np
import tensorflow as tf
from tensorflow.contrib import rnn

random.seed(777)
np.random.seed(777)
tf.set_random_seed(777)

#パラメーター
N_CLASSES = 3  # クラス数
N_INPUTS = 1  # 1ステップに入力されるデータ数
N_STEPS = 200  # 学習ステップ数
LEN_SEQ = 10  # 系列長
N_NODES = 64  # ノード数
N_DATA = 1000  # 各クラスの学習用データ数
N_TEST = 1000  # テスト用データ数
BATCH_SIZE = 20  # バッチサイズ

# データの準備
def gen_non_pulse(len_seq):
"""波を持たない系列データを生成する"""
ret = np.random.rand(len_seq)
ret = np.append(ret, 0)
return ret.reshape(-1,1)

def gen_pulse(len_seq, positive=True):
"""波を持つ系列データを生成する"""
seq = np.zeros(len_seq)
i = random.randint(0, len_seq-3)  # 波を立てる位置
w = random.randint(1, 4)
w = w if positive else w * (-1.)
e = 3 if positive else -3
l = 1 if positive else 2  # ラベル
seq[i], seq[i+1], seq[i+2] = w, w+e, w
noise = np.random.rand(len_seq)
ret = seq + noise
ret = np.append(ret, l)  # ラベルを加える
return ret.reshape(-1,1)

def gen_dataset(len_seq, n_data):
class_01_data = [gen_non_pulse(len_seq) for _ in range(n_data)]
class_02_data = [gen_pulse(len_seq, positive=True) for _ in range(n_data)]
class_03_data = [gen_pulse(len_seq, positive=False) for _ in range(n_data)]
dataset = np.r_[class_01_data, class_02_data, class_03_data]
np.random.shuffle(dataset)
x_ = dataset[:,:10]
t_ = dataset[:,10].reshape(-1)
return x_, t_

x_train, t_train = gen_dataset(LEN_SEQ, N_DATA)  # 学習用データセット
x_test, t_test = gen_dataset(LEN_SEQ, N_DATA)  # テスト用データセット

# モデルの構築
x = tf.placeholder(tf.float32, [None, LEN_SEQ, N_INPUTS])  # 入力データ
t = tf.placeholder(tf.int32, [None])  # 教師データ
t_on_hot = tf.one_hot(t, depth=N_CLASSES, dtype=tf.float32)  # 1-of-Kベクトル
cell = rnn.BasicRNNCell(num_units=N_NODES, activation=tf.nn.tanh)  # 中間層のセル
# RNNに入力およびセル設定する
outputs, states = tf.nn.dynamic_rnn(cell=cell, inputs=x, dtype=tf.float32, time_major=False)
# [ミニバッチサイズ,系列長,出力数]→[系列長,ミニバッチサイズ,出力数]
outputs = tf.transpose(outputs, perm=[1, 0, 2])

w = tf.Variable(tf.random_normal([N_NODES, N_CLASSES], stddev=0.01))
b = tf.Variable(tf.zeros([N_CLASSES]))
logits = tf.matmul(outputs[-1], w) + b  # 出力層
pred = tf.nn.softmax(logits)  # ソフトマックス

cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=t_on_hot, logits=logits)
loss = tf.reduce_mean(cross_entropy)  # 誤差関数
train_step = tf.train.AdamOptimizer().minimize(loss)  # 学習アルゴリズム

correct_prediction = tf.equal(tf.argmax(pred,1), tf.argmax(t_on_hot,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))  # 精度

# 学習の実行
sess = tf.Session()
sess.run(tf.global_variables_initializer())
i = 0
for _ in range(N_STEPS):
cycle = int(N_DATA*3 / BATCH_SIZE)
begin = int(BATCH_SIZE * (i % cycle))
end = begin + BATCH_SIZE
x_batch, t_batch = x_train[begin:end], t_train[begin:end]
sess.run(train_step, feed_dict={x:x_batch, t:t_batch})
i += 1
if i % 10 == 0:
loss_, acc_ = sess.run([loss, accuracy], feed_dict={x:x_batch,t:t_batch})
loss_test_, acc_test_ = sess.run([loss, accuracy], feed_dict={x:x_test,t:t_test})
print("[TRAIN] loss : %f, accuracy : %f" %(loss_, acc_))
print("[TEST loss : %f, accuracy : %f" %(loss_test_, acc_test_))
sess.close()

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • wakame

    2017/11/07 21:19

    ソースコードのシンタックスハイライトをつけたほうがコードがみやすくなると思います。こちらを参照して修正してもらえると助かります。https://teratail.com/help#about-markdown

    キャンセル

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

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

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

関連した質問

  • 解決済

    Tensorflowのfully_connected_feedの実行にエラーが続く

    tensoflowのfully_connected_feed.pyを実行しようとしているのですが、どう試行錯誤してもエラーが続きます。 tensorflowのインストールの仕方、

  • 解決済

    機械学習の精度が上がらない

    前提・実現したいこと tensorflowを使ったテストプログラムを作成し、機械学習に必要十分なデータ量がどれだけなのか、その感覚を掴みたい、またはそのデータ量を推定するための見当

  • 解決済

    tensorflowでのalexnetの実装で精度が変化しない

    前提・実現したいこと こんにちは。 趣味で画像認識を勉強しているものです。 「tensorflowでゆるゆりの製作会社を判定してみた」(http://mobiles-han.blo

  • 解決済

    TensorFlowでパッチ処理で精度計算を行い大量の画像を学習させたいです。

    前提・実現したいこと TensorFlowを使って2つの画像の分類を行っています. DeepLearningを用いるということで,10000枚程度のデータを学習したいと思っています

  • 受付中

    GPU版tensorflowが動かない

     前提・実現したいこと tensorflow(GPU)を使用して畳み込みニューラルネットワークの チュートリアルをやっています。  発生している問題・エラーメッセージ C:\U

  • 解決済

    KerasでSegnetを行いたい

    https://teratail.com/questions/131885#reply-200116 以前質問させていただいた部分は解決したのですが別の部分でエラーがでてしまいまし

  • 解決済

    Chainer 評価の欄が空白

     前提・実現したいこと Chainerを用いて、入力画像を2つのグループに分類するCNNを作ろうと考えています。 そして、作ったモデルを評価するためにextensionsを使うつも

  • 解決済

    学習の様子を可視化できない

    学習の様子を可視化できないです。 ・ ・ ・ # placeholders input_sequence = Input((story_maxlen,)) question =

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

  • Python

    7953questions

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

  • TensorFlow

    673questions

  • CSV

    635questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。