質問編集履歴

2

エラーが増えました あとコード全体乗せときます

2020/03/24 02:48

投稿

Flan.
Flan.

スコア123

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,62 @@
2
2
 
3
3
  コード
4
4
 
5
+ import numpy as np
6
+
7
+ class NN:
8
+
9
+ def __init__(self,):
10
+
11
+ self.N1=None
12
+
13
+ self.N2=None
14
+
15
+ self.N3=None
16
+
17
+ self.N4=None
18
+
19
+ n=NN()
20
+
21
+
22
+
23
+ class Relu:
24
+
25
+ def __init__(self,inp):
26
+
27
+ self.next=inp
28
+
29
+ self.N=self.next.N
30
+
31
+ self.mask = None
32
+
33
+ def f(self,x):
34
+
35
+ return np.maximum(0, x)
36
+
37
+ def b(self,dout,eta):
38
+
39
+ dout[self.mask] = 0
40
+
41
+ dx = dout
42
+
43
+ self.next.b(dx,eta)
44
+
45
+
46
+
47
+ class imput:
48
+
49
+ def __init__(self,N):
50
+
51
+ self.N=N
52
+
53
+ def start(self,inp):
54
+
55
+ return inp
56
+
57
+ def b():
58
+
59
+ print('学習完了')
60
+
5
61
  class afine:
6
62
 
7
63
  def __init__(self,N,inp):# インスタンス変数の初期化
@@ -10,9 +66,9 @@
10
66
 
11
67
  self.next=inp
12
68
 
13
- self.w = np.random.rand(self.next.N,N) * (2.0 /self.N)
69
+ self.w = np.random.rand(self.next.N,N) * (2.0 /self.N) # 重みは固定
14
-
70
+
15
- self.b = np.zeros(N)
71
+ self.by = np.zeros(N)
16
72
 
17
73
  self.x = None
18
74
 
@@ -20,17 +76,17 @@
20
76
 
21
77
  self.db = None
22
78
 
23
- def f(self,inp):
79
+ def f(self,x):
24
80
 
25
81
  self.x = x #入力を引数で渡す。
26
82
 
27
- return np.dot(inp, self.w) + self.b
83
+ return np.dot(self.x, self.w) + self.by # バイアス+重みx入力の行列を渡す
28
84
 
29
85
 
30
86
 
31
87
  def b(self,dout,eta):
32
88
 
33
- dx = np.dot(dout, self.W.T)#重みの形状の転置を行なって、それをdoutでdotする。
89
+ dx = np.dot(dout, self.w.T)#重みの形状の転置を行なって、それをdoutでdotする。
34
90
 
35
91
  self.dW = np.dot(self.x.T, dout)# 入力の形状の転置を行なって、それをdoutでdotする。
36
92
 
@@ -38,14 +94,12 @@
38
94
 
39
95
  self.w = self.w - eta*self.dW1
40
96
 
41
- self.b = self.b - eta*self.db1
97
+ self.by = self.by - eta*self.db1
42
98
 
43
99
  print('ddd',dx)
44
100
 
45
101
  self.next.b(dx,eta)
46
102
 
47
-
48
-
49
103
  class output:
50
104
 
51
105
  def __init__(self,zz):
@@ -64,8 +118,6 @@
64
118
 
65
119
  def loss(self,d,y,eta):
66
120
 
67
-
68
-
69
121
  batch_size = d.shape[0]
70
122
 
71
123
  if d.size == y.size: # 教師データがone-hot-vectorの場合
@@ -80,64 +132,132 @@
80
132
 
81
133
  dx = dx / batch_size
82
134
 
83
- print('ddd',dx)
135
+ print('aaaa',dx)
84
136
 
85
137
  self.next.b(dx,eta)
86
138
 
87
139
 
88
140
 
141
+ """
142
+
143
+ =====パラメーター======
144
+
145
+ epoc=エピソード 
146
+
147
+ step=ステップ数 
148
+
149
+ eta=学習率 
150
+
151
+ """
152
+
153
+
154
+
155
+
156
+
157
+ eta=0.01
158
+
159
+ epoc=1000
160
+
161
+ step=2000
162
+
163
+ #imput= input型
164
+
165
+ # mx= ニューロン数 前の層
166
+
167
+ #output= input
168
+
169
+ i=imput(10)
170
+
171
+ m1=afine(20,i)
172
+
173
+ r1=Relu(m1)
174
+
175
+ m2=afine(20,r1)
176
+
177
+ r2=Relu(m2)
178
+
89
- m3=afine(10,m2)
179
+ m3=afine(10,r2)
90
180
 
91
181
  o=output(m3)
92
182
 
93
-
183
+ #start(何をインプットにするか)
184
+
185
+ #mx.f(どのニューロン群を計算するか)
186
+
187
+ #o.f(何番目のニューロン群を使う)
188
+
189
+ zz=np.array([19,2,31,4,5,12,45,89,3,134])
190
+
191
+ n.N1=i.start(zz)
192
+
193
+ n.N1=m1.f(n.N1)
194
+
195
+ n.N1=r1.f(n.N1)
196
+
197
+ n.N1=m2.f(n.N1)
198
+
199
+ n.N1=r2.f(n.N1)
200
+
201
+ n.N1=m3.f(n.N1)
202
+
203
+ n.N1=o.f(n.N1)
204
+
205
+
206
+
207
+ y=np.array([0,0,0,1,0,0,0,0,0,0])
208
+
209
+ #出力 出力 eta
94
210
 
95
211
  o.loss(n.N1,y,0.01)
96
212
 
97
-
98
-
99
-
100
-
101
213
  ```
102
214
 
103
- 出ているエラー
215
+ 新しく出てきたエラー
104
-
105
- ddd [-6.49237594e-05 -6.00731630e-04 -6.90231441e-07 4.74755963e-02
216
+
106
-
107
- -1.73448303e-03 -4.74275643e-04 -3.36060448e-03 -4.04014648e-02
108
-
109
- -8.13266030e-04 -2.51566833e-05]
217
+ -
110
-
111
-
112
-
218
+
113
- TypeError Traceback (most recent call last)
219
+ ValueError Traceback (most recent call last)
114
-
220
+
115
- <ipython-input-151-479b73aa2f95> in <module>
221
+ <ipython-input-14-0b3cebe302aa> in <module>
116
-
222
+
117
- 88 y=np.array([0,0,0,1,0,0,0,0,0,0])
223
+ 102 y=np.array([0,0,0,1,0,0,0,0,0,0])
118
-
224
+
119
- 89
225
+ 103 #出力 出力 eta
120
-
226
+
121
- ---> 90 o.loss(n.N1,y,0.01)
227
+ --> 104 o.loss(n.N1,y,0.01)
122
-
123
- 91
228
+
124
-
125
- 92
229
+
126
-
127
-
128
-
230
+
129
- <ipython-input-151-479b73aa2f95> in loss(self, d, y, eta)
231
+ <ipython-input-14-0b3cebe302aa> in loss(self, d, y, eta)
130
-
232
+
131
- 59 dx = dx / batch_size
233
+ 65 dx = dx / batch_size
132
-
234
+
133
- 60 print('ddd',dx)
235
+ 66 print('aaaa',dx)
134
-
236
+
135
- ---> 61 self.next.b(dx,eta)
237
+ ---> 67 self.next.b(dx,eta)
238
+
136
-
239
+ 68
240
+
137
- 62 """
241
+ 69 """
242
+
243
+
244
+
138
-
245
+ <ipython-input-14-0b3cebe302aa> in b(self, dout, eta)
246
+
139
- 63 =====パラメーター======
247
+ 42 def b(self,dout,eta):
248
+
140
-
249
+ 43 dx = np.dot(dout, self.w.T)#重みの形状の転置を行なって、それをdoutでdotする。
250
+
141
-
251
+ ---> 44 self.dW = np.dot(self.x.T, dout)# 入力の形状の転置を行なって、それをdoutでdotする。
252
+
142
-
253
+ 45 self.db = np.sum(dout, axis=0)#バイアスはaxis=0で微分する。
254
+
255
+ 46 self.w = self.w - eta*self.dW1
256
+
257
+
258
+
143
- TypeError: 'numpy.ndarray' object is not callable
259
+ <__array_function__ internals> in dot(*args, **kwargs)
260
+
261
+
262
+
263
+ ValueError: shapes (20,) and (10,) not aligned: 20 (dim 0) != 10 (dim 0)

1

bについて記述しました bは関数です

2020/03/24 02:48

投稿

Flan.
Flan.

スコア123

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,48 @@
1
1
  ```ここに言語を入力
2
2
 
3
3
  コード
4
+
5
+ class afine:
6
+
7
+ def __init__(self,N,inp):# インスタンス変数の初期化
8
+
9
+ self.N=N
10
+
11
+ self.next=inp
12
+
13
+ self.w = np.random.rand(self.next.N,N) * (2.0 /self.N)
14
+
15
+ self.b = np.zeros(N)
16
+
17
+ self.x = None
18
+
19
+ self.dW = None
20
+
21
+ self.db = None
22
+
23
+ def f(self,inp):
24
+
25
+ self.x = x #入力を引数で渡す。
26
+
27
+ return np.dot(inp, self.w) + self.b
28
+
29
+
30
+
31
+ def b(self,dout,eta):
32
+
33
+ dx = np.dot(dout, self.W.T)#重みの形状の転置を行なって、それをdoutでdotする。
34
+
35
+ self.dW = np.dot(self.x.T, dout)# 入力の形状の転置を行なって、それをdoutでdotする。
36
+
37
+ self.db = np.sum(dout, axis=0)#バイアスはaxis=0で微分する。
38
+
39
+ self.w = self.w - eta*self.dW1
40
+
41
+ self.b = self.b - eta*self.db1
42
+
43
+ print('ddd',dx)
44
+
45
+ self.next.b(dx,eta)
4
46
 
5
47
 
6
48