質問編集履歴

2

コードの変更

2020/01/23 06:14

投稿

Tera0724
Tera0724

スコア18

test CHANGED
File without changes
test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
  for j in range(len(X[0])):
86
86
 
87
- m += (pra1_X[i][j]*w[0][j])
87
+ m += (X[i][j]*w[0][j])
88
88
 
89
89
  e.append(m)
90
90
 

1

一応うまくできたのでそのコードも記載した

2020/01/23 06:14

投稿

Tera0724
Tera0724

スコア18

test CHANGED
File without changes
test CHANGED
@@ -47,3 +47,77 @@
47
47
 
48
48
 
49
49
  以前重回帰分析も同様の方法で学習したのですが、その時には各重みによっての微分がうまくできたので原因がわからない状態です。解決方法について教えていただけると助かります。よろしくお願いします。
50
+
51
+
52
+
53
+ 上記コードについて、自然対数の乗数を先に計算して、それを当てはめていくという方法であればうまくいきました。
54
+
55
+ 以下に作成したコードを示します。
56
+
57
+ ```python
58
+
59
+ #説明変数をXとおく
60
+
61
+ X = np.array([[2,2,1], [7,8,1]])
62
+
63
+
64
+
65
+ #クラスをtとおく
66
+
67
+ t = np.array([1,0])
68
+
69
+
70
+
71
+ #sympyのSymbolを使用し重み変数を設定
72
+
73
+ w = np.array([w0, w1, w2])
74
+
75
+
76
+
77
+ 説明変数に対する各自然対数の乗数を計算
78
+
79
+ e = []
80
+
81
+ for i in range(len(X)):
82
+
83
+ m = 0
84
+
85
+ for j in range(len(X[0])):
86
+
87
+ m += (pra1_X[i][j]*w[0][j])
88
+
89
+ e.append(m)
90
+
91
+
92
+
93
+ #交差エントロピーの第1項を計算
94
+
95
+ Lw_1 = 0
96
+
97
+ for i in range(len(X)):
98
+
99
+ Lw_1 -= t[i] * np.dot(X[i], w.T)
100
+
101
+
102
+
103
+ #交差エントロピーの第2項を計算
104
+
105
+ Lw_2 = 0
106
+
107
+ for i in range(len(X)):
108
+
109
+ Lw_2 += sym.log(1+sym.exp(e[i]))
110
+
111
+
112
+
113
+ #各項を繋げる
114
+
115
+ Lw = Lw_1 + Lw_2
116
+
117
+ コード
118
+
119
+ ```
120
+
121
+ ただ、出力はできたのですが正しく計算が行われているのか疑問です。上記の記法でも問題ないのでしょうか?
122
+
123
+ 大変アバウトな質問となってしまい申し訳ありません。