質問編集履歴

6

質問変更

2018/07/20 00:40

投稿

trafalbad
trafalbad

スコア303

test CHANGED
@@ -1 +1 @@
1
- LSTMshapeとbatchどのよう指定したら良いかについて
1
+ 変化点検知最適な閾値決める計算式について
test CHANGED
@@ -1,56 +1,54 @@
1
- LSTMで以下データを学習さようと考えています
1
+ 質問変更申し訳ありま
2
2
 
3
3
 
4
4
 
5
- 1年分の1時間毎の索ワード数時系列データあります。
5
+ 変化点知で閾値を決める計算式についてなです
6
6
 
7
7
 
8
8
 
9
- shape(5208,)です。
9
+ 閾値を求める計算式
10
10
 
11
11
 
12
12
 
13
- これを時系列デタとして以下のコードで学習させます。
13
+ 閾値=(予測値実測値)**2
14
14
 
15
15
 
16
16
 
17
- ・1バッチを一週間分の168(一時間×24×7=168)として、time_windowを24(つまり一日分)に指定
18
-
19
-
20
-
21
- ・それ一年分なので、ちょうど168で割り切れる数の5208(168*32)このワード数を使って、バッチ数は32
17
+ というの資料で見たのですが
22
-
23
-
24
-
25
-
26
-
27
- この時、```Input```のshapeや、```model.fit()```のbatch数はどのように指定すれば良いかわかりません
28
18
 
29
19
 
30
20
 
31
21
  ```python
32
22
 
33
- Input(shape=(24,1))
23
+ 実測値(x)=176220.
34
24
 
35
- batch=31
25
+ 予測値(pred)=116860.
36
26
 
37
27
  ```
38
28
 
29
+ の場合閾値は
39
30
 
31
+ ```python
40
32
 
33
+ threshold = (pred - x) ** 2
34
+
41
- で良いのでしょうか?
35
+ threshold
36
+
37
+ >>>3523554989.011599
38
+
39
+ ```
40
+
41
+ となり、実測値を大きく上回っています。
42
+
43
+ しかもこの計算式だと、実測値と予測値の差が小さいときにも、検知してしまい、うまく行きません。
42
44
 
43
45
 
44
46
 
45
- time_widowが24なので、Input(shape=24,1)となるはずです(自分では(168,1)と指定しています)。
47
+ **・質問**
46
48
 
47
- 記のコードで動のですが、指定が正しくないに感じています
49
+ **上記の実測値と予測値から、うま実測値閾値を超えるようなを決める計算式はないでしょか?**
48
50
 
49
51
 
50
-
51
-
52
-
53
- Inputのshapeと、batchの値はどのように指定すれば良いのでしょうか?
54
52
 
55
53
  ご教授お願いします。
56
54
 
@@ -62,74 +60,22 @@
62
60
 
63
61
 
64
62
 
65
- ```python
63
+ *****備考*****
66
64
 
67
- #データ作成
65
+ ちなみに以下のような変化状況です
68
66
 
69
67
 
70
68
 
71
- def _load_data(data, n_prev=168):
72
-
73
- docX = []
74
-
75
- for i in range(len(data)-n_prev):
76
-
77
- docX.append(data.iloc[i:i+n_prev].as_matrix())
69
+ 一時間毎にカウントした検索ワードが、二時間後に96601から176220に上昇しているので、上記の実測値の時、確かに検索ワードの上昇が起こっています
78
-
79
- alsX = np.array(docX)
80
-
81
- return alsX
82
70
 
83
71
 
84
72
 
85
- df_train=pd.DataFrame(df_train[:5208]['cnt'])
73
+ 通常は8000付近をうろうろしているのですが、上記該当部で一時間ごとに
86
74
 
87
75
 
88
76
 
89
- mss = MinMaxScaler()
90
-
91
- train_frame = pd.DataFrame(mss.fit_transform(df_train))
92
-
93
- X_train = _load_data(train_frame)
94
-
95
- X_train.shape
96
-
97
- >>>(5040, 168, 1)
77
+ ```96601 133832→ 176220```
98
78
 
99
79
 
100
80
 
101
-
102
-
103
- #LSTMで訓練
81
+ という感じに変化しています。
104
-
105
- inputs = Input(shape=(168,1))
106
-
107
- x = LSTM(300, batch_input_shape=(None, 168, 1), stateful=False,
108
-
109
- return_sequences=True, kernel_initializer='lecun_uniform',
110
-
111
- activation='relu',
112
-
113
- bias_regularizer=None, activity_regularizer=None,
114
-
115
- dropout=0.2, recurrent_dropout=0.2)(inputs)
116
-
117
- out = Dense(1, kernel_initializer='lecun_uniform',
118
-
119
- activation='sigmoid')(x)
120
-
121
- model = Model(inputs, out)
122
-
123
- model.compile(loss="mean_squared_error",
124
-
125
- optimizer='Adam',
126
-
127
- metrics=['accuracy'])
128
-
129
-
130
-
131
- model.fit(X_train, X_train, epochs=20, batch_size=31)
132
-
133
-
134
-
135
- ```

5

質問変更

2018/07/20 00:40

投稿

trafalbad
trafalbad

スコア303

test CHANGED
@@ -1 +1 @@
1
- 入力data(batch,24,1)時のConv1dメソッドのkenel_sizeの値について
1
+ LSTMのshapeとbatchをどよう指定したら良いかについて
test CHANGED
@@ -1,13 +1,135 @@
1
- [このサイト](https://qiita.com/anafou/items/7c4d57a70efb42d105a5)は時系列入力データ(```input_shape = (24, 1)```)に対して、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)のkernel_sizeの引数に3指定しています
1
+ LSTM以下のデータを学習させようと考えています
2
2
 
3
3
 
4
4
 
5
- 今回は時系列データ```(batch, 24,1)```を入力データにして、conv1d()に入力したいのです、kenel_sizeはいくつに指定れば良いのでしょうか?
5
+ 1年分の1間毎の検索ワード数の時系列データがありま
6
6
 
7
7
 
8
8
 
9
- 指定る決め方等も教えていただけないでしょうか?
9
+ shapeは(5208,)で
10
10
 
11
11
 
12
12
 
13
+ これを時系列データとして以下のコードで学習させます。
14
+
15
+
16
+
17
+ ・1バッチを一週間分の168(一時間×24×7=168)として、time_windowを24(つまり一日分)に指定
18
+
19
+
20
+
21
+ ・それを一年分なので、ちょうど168で割り切れる数の5208(168*32)このワード数を使って、バッチ数は32
22
+
23
+
24
+
25
+
26
+
27
+ この時、```Input```のshapeや、```model.fit()```のbatch数はどのように指定すれば良いかわかりません
28
+
29
+
30
+
31
+ ```python
32
+
33
+ Input(shape=(24,1))
34
+
35
+ batch=31
36
+
37
+ ```
38
+
39
+
40
+
41
+ で良いのでしょうか?
42
+
43
+
44
+
45
+ time_widowが24なので、Input(shape=24,1)となるはずです(自分では(168,1)と指定しています)。
46
+
47
+ 下記のコードで動くのですが、指定値が正しくないように感じています
48
+
49
+
50
+
51
+
52
+
53
+ Inputのshapeと、batchの値はどのように指定すれば良いのでしょうか?
54
+
13
- よろしくお願いします
55
+ ご教授お願いします
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+ ```python
66
+
67
+ #データ作成
68
+
69
+
70
+
71
+ def _load_data(data, n_prev=168):
72
+
73
+ docX = []
74
+
75
+ for i in range(len(data)-n_prev):
76
+
77
+ docX.append(data.iloc[i:i+n_prev].as_matrix())
78
+
79
+ alsX = np.array(docX)
80
+
81
+ return alsX
82
+
83
+
84
+
85
+ df_train=pd.DataFrame(df_train[:5208]['cnt'])
86
+
87
+
88
+
89
+ mss = MinMaxScaler()
90
+
91
+ train_frame = pd.DataFrame(mss.fit_transform(df_train))
92
+
93
+ X_train = _load_data(train_frame)
94
+
95
+ X_train.shape
96
+
97
+ >>>(5040, 168, 1)
98
+
99
+
100
+
101
+
102
+
103
+ #LSTMで訓練
104
+
105
+ inputs = Input(shape=(168,1))
106
+
107
+ x = LSTM(300, batch_input_shape=(None, 168, 1), stateful=False,
108
+
109
+ return_sequences=True, kernel_initializer='lecun_uniform',
110
+
111
+ activation='relu',
112
+
113
+ bias_regularizer=None, activity_regularizer=None,
114
+
115
+ dropout=0.2, recurrent_dropout=0.2)(inputs)
116
+
117
+ out = Dense(1, kernel_initializer='lecun_uniform',
118
+
119
+ activation='sigmoid')(x)
120
+
121
+ model = Model(inputs, out)
122
+
123
+ model.compile(loss="mean_squared_error",
124
+
125
+ optimizer='Adam',
126
+
127
+ metrics=['accuracy'])
128
+
129
+
130
+
131
+ model.fit(X_train, X_train, epochs=20, batch_size=31)
132
+
133
+
134
+
135
+ ```

4

質問修正

2018/07/13 04:12

投稿

trafalbad
trafalbad

スコア303

test CHANGED
@@ -1 +1 @@
1
- 時系列データに対するkerasのConv1dメソッドの引数について
1
+ 入力data(batch,24,1)時のConv1dメソッドのkenel_sizeの値について
test CHANGED
@@ -1,5 +1,13 @@
1
- 入力データが時系列の3階テンソルのとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?
1
+ [このサイト](https://qiita.com/anafou/items/7c4d57a70efb42d105a5)では時系列の入力データ(```input_shape = (24, 1)```)に対して、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)のkernel_sizeの引数3を指定していま
2
2
 
3
3
 
4
4
 
5
- 入力するdataのshapeは時系列```(batch, time_window, input_dim)```の3階テンソルです
5
+ 今回は時系列データ```(batch, 24,1)```を入力データにして、conv1d()に入力したいのですが、kenel_sizeはいくつに指定すれば良いのでしょうか?
6
+
7
+
8
+
9
+ 指定する決め方等も教えていただけないでしょうか?
10
+
11
+
12
+
13
+ よろしくお願いします

3

2018/07/12 04:49

投稿

trafalbad
trafalbad

スコア303

test CHANGED
File without changes
test CHANGED
@@ -1,4 +1,4 @@
1
- 入力データが時系列の3階テンソルのとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?代入したいのですが、そのためにはtf.get_variableの第2引数にはどの値を指定すれば良いのでしょうか?
1
+ 入力データが時系列の3階テンソルのとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?
2
2
 
3
3
 
4
4
 

2

2018/07/11 13:08

投稿

trafalbad
trafalbad

スコア303

test CHANGED
@@ -1 +1 @@
1
- tf.get_variable をkerasで使たい
1
+ 時系列データに対するkerasのConv1dメソッドの引数につ
test CHANGED
@@ -1,49 +1,5 @@
1
- tensorflow[tf.get_variableメッド](https://www.tensorflow.org/api_docs/python/tf/get_variable)を以下ようにkerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeに代入したいのですが、そのためにはtf.get_variableの第2引数にはどの値を指定すれば良いのでしょうか?
1
+ 入力データが時系列3階テンとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?代入したいのですが、そのためにはtf.get_variableの第2引数にはどの値を指定すれば良いのでしょうか?
2
2
 
3
3
 
4
4
 
5
- LSTM(QRNN)で入力するdataのshapeは時系列で```(batch, time_window, input_dim)```の3階テンソルです。
5
+ 入力するdataのshapeは時系列で```(batch, time_window, input_dim)```の3階テンソルです。
6
-
7
-
8
-
9
-
10
-
11
- それかtf.get_variableの代わりになるメソッドがkerasにあるのでしょうか?
12
-
13
- Conv1Dのkernel_sizeにtf.get_variableを使用するにはどのようにしたら良いのかご教授お願いします。
14
-
15
-
16
-
17
-
18
-
19
- ソースコードは[このサイト](https://github.com/icoxfog417/tensorflow_qrnn/blob/master/tf_qrnn.py)です
20
-
21
- ```python
22
-
23
- from keras.layers import Conv1D
24
-
25
- import tensorflow as tf
26
-
27
-
28
-
29
- size=5
30
-
31
- conv_size=3
32
-
33
- in_size=10
34
-
35
- _weight_size=size*3
36
-
37
- initializer = tf.random_normal_initializer()
38
-
39
- conv_filter = tf.get_variable("conv_filter", [conv_size, in_size, _weight_size], initializer=initializer)
40
-
41
-
42
-
43
-
44
-
45
- _w = Conv1D(x, kernel_size=conv_filter, strides=1, padding="SAME")
46
-
47
-
48
-
49
- ```

1

質問修正

2018/07/11 13:07

投稿

trafalbad
trafalbad

スコア303

test CHANGED
@@ -1 +1 @@
1
- keras.layers.RNN()の第一引数のメソッドにつ
1
+ tf.get_variable をkerasで使たい
test CHANGED
@@ -1,67 +1,49 @@
1
- [keras.layers.RNN()](https://keras.io/ja/layers/recurrent/)の第一引数のメソッドについて、以下のようなstep()関数をたいのですが、メソッド引数の```input_at_t```と ```states_at_t```はどのような形ですればいのでしょうか?
1
+ tensorflowの[tf.get_variableメソッド](https://www.tensorflow.org/api_docs/python/tf/get_variable)を以下のようにkerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeに代たいのですが、ためにはtf.get_variableの第2引数にはどの値を指定すればいのでしょうか?
2
2
 
3
3
 
4
4
 
5
- メソッドの引数を定義する専用関数とかあるのでしょうか?
5
+ LSTM(QRNN)で入力するdatashapeは時系列で```(batch, time_window, input_dim)```3階テンソルす。
6
-
7
- ご教授お願いします
8
6
 
9
7
 
10
8
 
11
9
 
12
10
 
11
+ それかtf.get_variableの代わりになるメソッドがkerasにあるのでしょうか?
13
12
 
14
-
15
- なお下記のstep()関数は[github](https://github.com/DingKe/qrnn/blob/master/qrnn.py)を参考にしました
16
-
17
- inputするデータは時系列データで```(batch,timw_window,input_dim)```で
13
+ Conv1Dのkernel_sizeにtf.get_variableを使用るにはどのようにしたら良いのかご教授お願いします。
18
14
 
19
15
 
20
16
 
21
17
 
22
18
 
19
+ ソースコードは[このサイト](https://github.com/icoxfog417/tensorflow_qrnn/blob/master/tf_qrnn.py)です
20
+
23
21
  ```python
24
22
 
25
- ex:input_data.shape
23
+ from keras.layers import Conv1D
26
24
 
27
- (4800,3,21)
25
+ import tensorflow as tf
28
26
 
29
27
 
30
28
 
29
+ size=5
30
+
31
+ conv_size=3
32
+
31
- step関数
33
+ in_size=10
34
+
35
+ _weight_size=size*3
36
+
37
+ initializer = tf.random_normal_initializer()
38
+
39
+ conv_filter = tf.get_variable("conv_filter", [conv_size, in_size, _weight_size], initializer=initializer)
40
+
41
+
32
42
 
33
43
 
34
44
 
35
- def step(input, states,dropout=0.2):
45
+ _w = Conv1D(x, kernel_size=conv_filter, strides=1, padding="SAME")
36
46
 
37
- prev_output = states[0]
47
+
38
-
39
-
40
-
41
- z = input[:, :output_dim]
42
-
43
- f = input[:, output_dim:2 * output_dim]
44
-
45
- o = input[:, 2 * output_dim:]
46
-
47
-
48
-
49
- z = K.tanh(z)
50
-
51
- f = f if dropout is not None and 0. < dropout < 1. else K.sigmoid(f)
52
-
53
- o = K.sigmoid(o)
54
-
55
-
56
-
57
- output = f * prev_output + (1 - f) * z
58
-
59
- output = o * output
60
-
61
-
62
-
63
- return output, [output]
64
-
65
-
66
48
 
67
49
  ```