質問編集履歴
5
修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -56,25 +56,9 @@
|
|
56
56
|
|
57
57
|
|
58
58
|
|
59
|
-
|
59
|
+
=> thresholdedReLu関数を使用することにしました。
|
60
60
|
|
61
61
|
|
62
|
-
|
63
|
-
def myactivation(x):
|
64
|
-
|
65
|
-
x = K.softmax(x) - 0.6
|
66
|
-
|
67
|
-
if
|
68
|
-
|
69
|
-
return K.softmax(x)
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
model.add(Activation(myactivation))
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
```
|
78
62
|
|
79
63
|
ただ後者では出力が0の際に損失関数が必要以上に大きくなってしまうような気がするので、softmaxの出力に閾値を設定して無視するより、出力に重み付けをするほうがよいのではないかという気がし始めています。
|
80
64
|
|
4
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
### 追記(tkymtmt さんの回答を参考にしたもの)
|
17
|
+
### 追記 12/9(tkymtmt さんの回答を参考にしたもの)
|
18
18
|
|
19
19
|
|
20
20
|
|
@@ -77,3 +77,9 @@
|
|
77
77
|
```
|
78
78
|
|
79
79
|
ただ後者では出力が0の際に損失関数が必要以上に大きくなってしまうような気がするので、softmaxの出力に閾値を設定して無視するより、出力に重み付けをするほうがよいのではないかという気がし始めています。
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
### 追記 12/10
|
84
|
+
|
85
|
+
損失関数に交差エントロピーを用いている時に出力にしきい値を設定してしまうと、損失関数が計算できず(log(0)になるため)学習が進まなくなる可能性が高まる。
|
3
タイトルの変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
情報を含まないデータを含むデータセットの二値分類
|
test
CHANGED
File without changes
|
2
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
kerasによる
|
1
|
+
kerasによる分類におけるsigmoid出力の学習の際の重み付けについて
|
test
CHANGED
@@ -52,7 +52,7 @@
|
|
52
52
|
|
53
53
|
(relu関数の出力をモデルの出力とすると最大が0.4となり、必要以上に誤差が大きくなってしまうと考えました。)
|
54
54
|
|
55
|
-
ただ最後のsoftmaxを通すことで必要以上に出力が増幅されてしまうと考えられるので、y = 0 (x < 0.6), y = x (0.6 <= x)となるように
|
55
|
+
ただ最後のsoftmaxを通すことで必要以上に出力が増幅されてしまうと考えられるので、y = 0 (x < 0.6), y = x (0.6 <= x)となるように以下の活性化関数も作成しました。
|
56
56
|
|
57
57
|
|
58
58
|
|
@@ -75,3 +75,5 @@
|
|
75
75
|
|
76
76
|
|
77
77
|
```
|
78
|
+
|
79
|
+
ただ後者では出力が0の際に損失関数が必要以上に大きくなってしまうような気がするので、softmaxの出力に閾値を設定して無視するより、出力に重み付けをするほうがよいのではないかという気がし始めています。
|
1
回答に対する追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -11,3 +11,67 @@
|
|
11
11
|
一通りgoogle検索をかけたりkerasのドキュメントをよんだりしたのですが実現する方法が見当たりませんでした。損失関数を自作する必要などがあるのでしょうか。
|
12
12
|
|
13
13
|
よろしくお願いいたします。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
### 追記(tkymtmt さんの回答を参考にしたもの)
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
出力層のソフトマックス層
|
22
|
+
|
23
|
+
```python3
|
24
|
+
|
25
|
+
model.add(Activation('softmax'))
|
26
|
+
|
27
|
+
```
|
28
|
+
|
29
|
+
の活性化関数を変更するため以下のようにしました。
|
30
|
+
|
31
|
+
```python3
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
def myactivation(x):
|
36
|
+
|
37
|
+
x = K.softmax(x) - 0.6
|
38
|
+
|
39
|
+
x = K.relu(x)
|
40
|
+
|
41
|
+
return K.softmax(x)
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
model.add(Activation(myactivation))
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
```
|
50
|
+
|
51
|
+
softmaxの出力から0.6を引き、reluを通すことで0.6以下の出力を0にした後、0.6以上の出力の最大値を1にするためにsoftmaxに入力した結果を出力としました。
|
52
|
+
|
53
|
+
(relu関数の出力をモデルの出力とすると最大が0.4となり、必要以上に誤差が大きくなってしまうと考えました。)
|
54
|
+
|
55
|
+
ただ最後のsoftmaxを通すことで必要以上に出力が増幅されてしまうと考えられるので、y = 0 (x < 0.6), y = x (0.6 <= x)となるようにいかの活性化関数も作成しました。
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
```python3
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
def myactivation(x):
|
64
|
+
|
65
|
+
x = K.softmax(x) - 0.6
|
66
|
+
|
67
|
+
if
|
68
|
+
|
69
|
+
return K.softmax(x)
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
model.add(Activation(myactivation))
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
```
|