質問編集履歴
6
質問変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
変化点検知の最適な閾値を決める計算式について
|
test
CHANGED
@@ -1,56 +1,54 @@
|
|
1
|
-
|
1
|
+
質問の変更申し訳ありません
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
変化点検知で閾値を決める計算式についてなのですが
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
|
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
|
-
|
17
|
+
というのを資料で見たのですが、
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
この時、```Input```のshapeや、```model.fit()```のbatch数はどのように指定すれば良いかわかりません
|
28
18
|
|
29
19
|
|
30
20
|
|
31
21
|
```python
|
32
22
|
|
33
|
-
|
23
|
+
実測値(x)=176220.
|
34
24
|
|
35
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
69
|
+
一時間毎にカウントした検索ワードが、二時間後に96601から176220に上昇しているので、上記の実測値の時、確かに検索ワードの上昇が起こっています
|
78
|
-
|
79
|
-
alsX = np.array(docX)
|
80
|
-
|
81
|
-
return alsX
|
82
70
|
|
83
71
|
|
84
72
|
|
85
|
-
|
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
|
-
|
77
|
+
```96601 → 133832→ 176220```
|
98
78
|
|
99
79
|
|
100
80
|
|
101
|
-
|
102
|
-
|
103
|
-
|
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
質問変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
LSTMのshapeとbatchをどのように指定したら良いかについて
|
test
CHANGED
@@ -1,13 +1,135 @@
|
|
1
|
-
|
1
|
+
LSTMで以下のデータを学習させようと考えています
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
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
質問修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
入力data(batch,24,1)の時のConv1dメソッドのkenel_sizeの値について
|
test
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
-
入力データ
|
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
|
-
|
5
|
+
今回は時系列データ```(batch, 24,1)```を入力データにして、conv1d()に入力したいのですが、kenel_sizeはいくつに指定すれば良いのでしょうか?
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
指定する決め方等も教えていただけないでしょうか?
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
よろしくお願いします
|
3
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
入力データが時系列の3階テンソルのとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?
|
1
|
+
入力データが時系列の3階テンソルのとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?
|
2
2
|
|
3
3
|
|
4
4
|
|
2
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
時系列データに対するkerasのConv1dメソッドの引数について
|
test
CHANGED
@@ -1,49 +1,5 @@
|
|
1
|
-
|
1
|
+
入力データが時系列の3階テンソルのとき、kerasの[Conv1dメソッド](https://keras.io/ja/layers/convolutional/)の引数のkernel_sizeにはどのような値を指定すればいいのでしょうか?代入したいのですが、そのためにはtf.get_variableの第2引数にはどの値を指定すれば良いのでしょうか?
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
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
質問修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
tf.get_variable をkerasで使いたい
|
test
CHANGED
@@ -1,67 +1,49 @@
|
|
1
|
-
[
|
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)で入力するdataのshapeは時系列で```(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
|
-
|
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
|
-
e
|
23
|
+
from keras.layers import Conv1D
|
26
24
|
|
27
|
-
|
25
|
+
import tensorflow as tf
|
28
26
|
|
29
27
|
|
30
28
|
|
29
|
+
size=5
|
30
|
+
|
31
|
+
conv_size=3
|
32
|
+
|
31
|
-
|
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
|
-
|
45
|
+
_w = Conv1D(x, kernel_size=conv_filter, strides=1, padding="SAME")
|
36
46
|
|
37
|
-
|
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
|
```
|