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

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

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

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Q&A

0回答

1799閲覧

TensorflowのRNNを用いたsin波の予測を行いたい

rosbergf1

総合スコア13

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

0グッド

0クリップ

投稿2020/03/22 08:57

編集2020/03/22 10:08

前提・実現したいこと

TensorflowのRNNを使って, sin波の予測を行いたいです.
まずは簡単なsin波の予測を行い, Tensorflowについて理解を深めてから研究に応用したいと思っています.

発生している問題・エラーメッセージ

以下のサイトを参考にコーディングを行いましたが, エラーが発生してしまいます.
https://qiita.com/p-baleine@github/items/262399318c88f5b069ba

特に, 下記の部分が何をやっているのかがわからなく, この部分でエラーが発生しています.

隠れ層~出力層
outputs, state = tf.compat.v1.nn.dynamic_rnn(cell, x, sequence_length=sequence_length, initial_state=initial_state, dtype=tf.float32,
parallel_iterations=None, swap_memory=False, time_major=False, scope=None
)

index = tf.range(0, batch_size) * lenge + (sequence_length - 1)
output = tf.gather(tf.reshape(output, [-1, n_hidden]), index)

以下は, エラーメッセージをpdf化したものです.
エラーメッセージ

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-126-cba0a54bd80a> in <module> 71 #隠れ層~出力層 72 outputs, state = tf.compat.v1.nn.dynamic_rnn(cell, x, sequence_length=sequence_length, initial_state=initial_state, dtype=tf.float32, ---> 73 parallel_iterations=None, swap_memory=False, time_major=False, scope=None 74 ) 75

該当のソースコード

Python3

1import matplotlib.pyplot as plt 2import numpy as np 3import tensorflow as tf 4import random 5import time 6import os 7import csv 8 9def init_weight_variable(shape): 10 """Initialize variable in a suitable way for weights.""" 11 initial = tf.truncated_normal(shape, stddev=0.1) 12 return tf.Variable(initial) 13 14def init_bias_variable(shape): 15 """Initialize variable in a suitable way for biases.""" 16 initial = tf.constant(0.1, shape=shape) 17 return tf.Variable(initial) 18 19def make_data(data_num): 20 amp = 10 21 DATA = np.linspace(0., 2 * np.pi, data_num) 22 DATA = DATA[:, None] 23 data = amp*np.sin(DATA) 24 data = data + 0.1 * amp * ((1 - (-1)) * np.random.rand(data_num, n_input) + (-1)) 25 data.reshape(data_num, n_input) 26 return data 27 28def data_to_sequence(data): 29 lenge = 25 30 TIME = data.shape[0] 31 period = TIME - lenge 32 x = [] 33 y = [] 34 for i in range(0, period): 35 x.append(data[i: i+lenge]) 36 y.append(data[i+lenge]) 37 #print(f"{y}") 38 npx = np.array(x).reshape(period, lenge, n_input) 39 npy = np.array(y).reshape(period, n_input) 40 return npx, npy 41 42 43t1 = time.time() 44# Step 1. Prepare data 45 46#学習データ 47traindata_num = 30 48traindata = make_data(traindata_num) 49train_x, train_y = data_to_sequence(traindata) 50print(str(train_x.shape) +"," + str(train_y.shape)) 51 52#テストデータ 53testdata_num = 30 54testdata = make_data(testdata_num) 55test_x, test_y = data_to_sequence(testdata) 56 57# Step 2. Define operation 58n_input = 1 59n_hidden = 30 60n_output = 1 61 62#入力層 63x = tf.placeholder(tf.float32, [None, lenge, n_input]) 64sequence_length = tf.placeholder(tf.int32, [None]) 65batch_size = tf.shape(x)[0] 66 67#隠れ層 68cell = tf.compat.v1.nn.rnn_cell.LSTMCell(n_hidden) 69initial_state = cell.zero_state(batch_size, dtype=tf.float32) 70 71#隠れ層~出力層 72outputs, state = tf.compat.v1.nn.dynamic_rnn(cell, x, sequence_length=sequence_length, initial_state=initial_state, dtype=tf.float32, 73 parallel_iterations=None, swap_memory=False, time_major=False, scope=None 74 ) 75 76index = tf.range(0, batch_size) * lenge + (sequence_length - 1) 77output = tf.gather(tf.reshape(output, [-1, n_hidden]), index) 78 79w = (init_weight_variable((n_hidden, n_output))) 80b = (init_bias_variable((n_output,))) 81y_output = tf.matmul((output, w) + b) 82 83init = tf.global_variables_initializer() 84y = tf.placeholder(tf.float32) 85loss = tf.reduce_mean((y_output - y)**2) 86train = tf.train.AdamOptimizer().minimize(loss) 87 88# Step 3. Run operation 89with tf.Session() as sess: 90 sess.run(init) 91 epoch = 1000 92 batch_size = 32 # バッチサイズ 93 iteration = int(train_x.size/(n_input*batch_size)) 94 vec_loss = [] 95 print("学習開始") 96 for i in range(epoch): 97 # ランダムなindexを作成(0〜学習データのサイズをバッチの個数分) 98 rnd_idx = np.random.randint(0, int(TIME - lenge)) 99 for j in range(iteration): 100 x_batch_data = train_x[rnd_idx] 101 y_batch_data = train_y[rnd_idx] 102 sess.run(train, feed_dict={x: x_batch_data, y: y_batch_data}) 103 104 loss_train = sess.run(loss, feed_dict={x: train_x, y: train_y}) 105 vec_loss.append(loss_train) 106 if i % (epoch/10) == 0 and i != 0 or i == 1: 107 print(i,"epoch, " f"Loss: {loss_train}") 108 train_y_output = sess.run(y_output, {x: train_x, y: train_y}) 109 plt.plot(train_y, label='Train_answer') 110 plt.plot(train_output, label='Train_output') 111 plt.legend() 112 plt.show() 113 114 train_output = sess.run(y_output, {x: train_x, y: train_y}) 115 plt.plot(train_y, label='Train_answer') 116 plt.plot(train_output, label='Train_output') 117 plt.legend() 118 plt.show() 119 120 plt.plot(vec_loss, label='Error of training') 121 plt.legend() 122 plt.show() 123 124 loss_test = sess.run(loss, feed_dict={x: test_x, y: test_y}) 125 print("Testdata:, " f"Loss: {loss_test}") 126 127 plt.plot(test_y, label='Test_answer') 128 plt.plot(test_output, label='Test_output') 129 plt.legend() 130 plt.show() 131 132t2 = time.time() 133 134# 経過時間を表示 135elapsed_time = t2-t1 136print(f"経過時間:{elapsed_time}")

試したこと

tf.nn.dynamic_rnnについて調べてみましたが, 試行錯誤してもうまくいきませんでした.

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

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

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

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

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

Matsui_hero

2020/03/22 09:49

エラー箇所はわかるんですが、エラーメッセージがわかりません。エラーメッセージも書いてもらえたらうれしいです。
rosbergf1

2020/03/22 10:09

かしこまりました。pdf化してリンクを貼りました。 よろしくお願いいたします。
Matsui_hero

2020/03/22 10:24

すみませんが、わからなかったです。 こちらの質問と同じエラーメッセージが出ています。こちらが解決済みになっているので、同じことをしてみるといいかもしれません https://teratail.com/questions/148944
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問