質問編集履歴

2

タイトルの変更

2019/11/23 07:51

投稿

hidekun-
hidekun-

スコア4

test CHANGED
@@ -1 +1 @@
1
- shapes (32,2) and (1,30) not aligned: 2 (dim 1) != 1 (dim 0)の内積計算エラーを解決したい
1
+ ニューラルネットワークに内の内積計算エラーを解決したい
test CHANGED
File without changes

1

該当コード、エラー内容を分かりやすくした

2019/11/23 07:51

投稿

hidekun-
hidekun-

スコア4

test CHANGED
File without changes
test CHANGED
@@ -6,16 +6,18 @@
6
6
 
7
7
 
8
8
 
9
- そのなかで、以下のエラーメッセージが発生しました。
9
+ そのなかで、以下の行列の内積計算エラーメッセージが発生しました。
10
-
11
-
12
-
13
-
14
-
10
+
11
+
12
+
13
+
14
+
15
- ### 発生している問題・エラーメッセージ
15
+ 発生している問題・エラーメッセージ
16
16
 
17
17
  ---------------------------------------------------------------------------
18
18
 
19
+ ```python
20
+
19
21
  ValueError Traceback (most recent call last)
20
22
 
21
23
  <ipython-input-42-64c8b1648510> in <module>
@@ -60,231 +62,265 @@
60
62
 
61
63
 
62
64
 
63
-
65
+ ```
64
66
 
65
67
  ### 該当のソースコード
66
68
 
67
- import numpy as np
68
-
69
- import pandas as pd
70
-
71
- from sklearn.model_selection import train_test_split
72
-
73
- import matplotlib.pyplot as plt
74
-
75
- import matplotlib.pyplot as plt
76
-
77
-
78
-
79
- def affine(z, w, b):
80
-
81
- return np.dot(z, w) + b
82
-
83
-
84
-
85
-
86
-
87
- def affine_back(du, z, w, b):
88
-
89
- dz = np.dot(du, w.T)
90
-
91
- dw = np.dot(z.T, du)
92
-
93
- db = np.dot(np.ones(z.shape[0]).T, du)
94
-
95
- return dz, dw, db
96
-
97
- def sigmoid(u):
98
-
99
- return 1 / (1 + np.exp(-u))
100
-
101
-
102
-
103
-
104
-
105
- def sigmoid_back(u):
106
-
107
- return (1 - sigmoid(u)) * sigmoid(u)
108
-
109
- def identity(u):
110
-
111
- return u
112
-
113
-
114
-
115
-
116
-
117
- def squared_error(y, t):
118
-
119
- return 0.5 * np.sum((y - t) ** 2) / y.shape[0]
120
-
121
-
122
-
123
-
124
-
125
- def identity_mean_squared_error_back(y, t):
126
-
127
- return (y - t) / y.shape[0]
128
-
129
-
130
-
131
-
132
-
133
- def learn(x, t, w1, b1, w2, b2, w3, b3, lr):
134
-
135
-
136
-
137
- u1 = affine(x, w1, b1)
138
-
139
- z1 = sigmoid(u1)
140
-
141
- u2 = affine(z1, w2, b2)
142
-
143
- z2 = sigmoid(u2)
144
-
145
- u3 = affine(z2, w3, b3)
146
-
147
- y = identity(u3)
148
-
149
-
150
-
151
-
152
-
153
- dy = identity_mean_squared_error_back(y, t)
154
-
155
- dz2, dw3, db3 = affine_back(dy, z2, w3, b3)
156
-
157
- du2 = sigmoid_back(u2)
158
-
159
- dz1, dw2, db2 = affine_back(du2, z1, w2, b2)
160
-
161
- du1 = sigmoid_back(u1)
162
-
163
- dx, dw1, db1 = affine_back(du1, x, w1, b1)
164
-
165
-
166
-
167
-
168
-
169
- w1 = w1 - lr * dw1
170
-
171
- b1 = b1 - lr * db1
172
-
173
- w2 = w2 - lr * dw2
174
-
175
- b2 = b2 - lr * db2
176
-
177
- w3 = w3 - lr * dw3
178
-
179
- b3 = b3 - lr * db3
180
-
181
- return w1, b1, w2, b2, w3, b3
182
-
183
- def predict(x, w1, b1, w2, b2, w3, b3):
184
-
185
-
186
-
187
-
188
-
189
- u1 = affine(x, w1, b1)
190
-
191
- z1 = sigmoid(u1)
192
-
193
- u2 = affine(z1, w2, b2)
194
-
195
- z2 = sigmoid(u2)
196
-
197
- u3 = affine(z2, w3, b3)
198
-
199
- y = identity(u3)
200
-
201
- return y
202
-
203
-
204
-
205
- df = pd.read_csv('earthquake_B_traffic.csv')
206
-
207
-
208
-
209
-
210
-
211
- df_x = df.drop("regulatory period", axis=1)
212
-
213
- p= df.drop("damage range", axis=1)
214
-
215
- q= p.drop( "embankment height", axis=1)
216
-
217
- r= q.drop("landform", axis=1)
218
-
219
- s= r.drop("banking structure", axis=1)
220
-
221
- t= s.drop("damage form", axis=1)
222
-
223
- u= t.drop("traffic", axis=1)
224
-
225
-
226
-
227
-
228
-
229
- x_train, x_test, t_train, t_test = train_test_split(df_x, t, test_size=0.3)
230
-
231
-
232
-
233
-
234
-
235
- d0 = x_train.shape[1]
236
-
237
- d1 = 30 # 1 層目のノード数
238
-
239
- d2 = 30 # 2 層目のノード数
240
-
241
- d3 = 1 #出力層
242
-
243
-
244
-
245
- w1 = np.random.rand(d0, d1)*0.001
246
-
247
- w2 = np.random.rand(d1, d2)*0.001
248
-
249
- w3 = np.random.rand(d2, d3)*0.001
250
-
251
-
252
-
253
-
254
-
255
- b1 = np.zeros(d1)
256
-
257
- b2 = np.zeros(d2)
258
-
259
- b3 = np.zeros(d3)
260
-
261
-
262
-
263
-
264
-
265
- lr = 0.5
266
-
267
-
268
-
269
- batch_size = 32
270
-
271
-
272
-
273
- epoch =1000
274
-
275
-
276
-
277
- x = [0, epoch]
278
-
279
- y = [0.100]
280
-
281
-
282
-
283
- for i in range(epoch):
284
-
285
- for j in range(0, x_train.shape[0], batch_size): w1, b1, w2, b2, w3, b3 = learn(x_train[j:j
286
-
287
- + batch_size], t_train[j:j + batch_size], w1, b1, w2, b2, w3, b3, lr)
69
+ ```python
70
+
71
+ import numpy as np
72
+
73
+ import pandas as pd
74
+
75
+ from sklearn.model_selection import train_test_split
76
+
77
+ import matplotlib.pyplot as plt
78
+
79
+ import matplotlib.pyplot as plt
80
+
81
+
82
+
83
+ # affine変換してる
84
+
85
+ def affine(z, w, b):
86
+
87
+ return np.dot(z, w) + b
88
+
89
+
90
+
91
+ # affine変換勾配
92
+
93
+ def affine_back(du, z, w, b):
94
+
95
+ dz = np.dot(du, w.T)
96
+
97
+ dw = np.dot(z.T, du)
98
+
99
+ db = np.dot(np.ones(z.shape[0]).T, du)
100
+
101
+ return dz, dw, db
102
+
103
+ def sigmoid(u):
104
+
105
+ return 1 / (1 + np.exp( u))
106
+
107
+
108
+
109
+ #活性化関数 シグモイド 勾配,中間層の勾配
110
+
111
+ def sigmoid_back(u):
112
+
113
+ return (1 sigmoid(u)) * sigmoid(u)
114
+
115
+ def identity(u):
116
+
117
+ return u
118
+
119
+
120
+
121
+
122
+
123
+ #二乗和誤差:回帰問題
124
+
125
+ def squared_error(y, t):
126
+
127
+ return 0.5 * np.sum((y t) ** 2) / y.shape[0]
128
+
129
+
130
+
131
+
132
+
133
+ #誤差 二乗和誤差)+活性化関数 恒等関数 の勾配
134
+
135
+ def identity_mean_s
136
+
137
+ quared_error_back(y, t):
138
+
139
+ return (y t) / y.shape[0]
140
+
141
+
142
+
143
+ #学習部分
144
+
145
+ def learn(x, t, w1, b1, w2, b2, w3, b3, lr):
146
+
147
+ #順伝播 入力データから、予測データを求めるまで
148
+
149
+ u1 = affine(x, w1, b1)
150
+
151
+ z1 = sigmoid(u1)
152
+
153
+ u2 = affine(z1, w2, b2)
154
+
155
+ z2 = sigmoid(u2)
156
+
157
+ u3 = affine(z2, w3, b3)
158
+
159
+ y = identity(u3)
160
+
161
+
162
+
163
+ #逆伝播 勾配の計算を求め、重みの更新を行う部分
164
+
165
+ dy = identity_mean_squared_error_back(y, t)
166
+
167
+ dz2, dw3, db3 = affine_back(dy, z2, w3, b3)
168
+
169
+ du2 = sigmoid_back(u2)
170
+
171
+ dz1, dw2, db2 = affine_back(du2, z1, w2, b2)
172
+
173
+ du 1 = sigmoid_back(u1)
174
+
175
+ dx, dw1, db1 = affine_back(du1, x, w1, b1)
176
+
177
+
178
+
179
+ #重み、バイアスの更新
180
+
181
+ w1 = w1 lr * dw1
182
+
183
+ b1 = b1 lr * db1
184
+
185
+ w2 = w2 lr * dw2
186
+
187
+ b2 = b2 lr * db2
188
+
189
+ w3 = w3 lr * dw3
190
+
191
+ b3 = b3 lr * db3
192
+
193
+ return w1, b1, w2, b2, w3, b3
194
+
195
+
196
+
197
+ def predict(x, w1, b1, w2, b2, w3, b3):
198
+
199
+ #順伝播
200
+
201
+ u1 = affine(x, w1, b1)
202
+
203
+ z1 = sigmoid(u1)
204
+
205
+ u2 = affine(z1, w2, b2)
206
+
207
+ z2 = sigmoid(u2)
208
+
209
+ u3 = affine(z2, w3, b3)
210
+
211
+ y = identity(u3)
212
+
213
+ return y
214
+
215
+
216
+
217
+ #実行プログラム
218
+
219
+ #地震データ読み込み
220
+
221
+ df = pd.read_csv('earthquake_B_traffic.csv')
222
+
223
+
224
+
225
+ # データの作成データの作成 説明変数・目的変数分ける説明変数・目的変数分ける
226
+
227
+ df_x = df.drop("regulatory period", axis=1)
228
+
229
+ p= df.drop("damage range", axis=1)
230
+
231
+ q= p.drop( "embankment height", axis=1)
232
+
233
+ r= q.drop("landform", axis=1)
234
+
235
+ s= r.drop("banking structure", axis=1)
236
+
237
+ t= s.drop("damage form", axis=1)
238
+
239
+ u= t.drop("traffic", axis=1)
240
+
241
+
242
+
243
+ # 説明変数・目的変数をそれぞれ訓練データ・テストデータに分割説明変数・目的変数をそれぞれ訓練データ・テストデータに分割
244
+
245
+ x_train, x_test, t_train, t_test = train_test_split(df_x, t, test_size=0.3)
246
+
247
+
248
+
249
+ #ノード数設定
250
+
251
+ d0 = x_train.shape[1]
252
+
253
+ d1 = 30 # 1層目のノード 数
254
+
255
+ d2 = 30 # 2層目のノード数
256
+
257
+ d3 = 1 #出力層
258
+
259
+
260
+
261
+ #重みの初期化 0.1 0.1 の乱数
262
+
263
+ np.random.seed(8)
264
+
265
+ w1 = np.random.rand(d0, d1)*0.001
266
+
267
+ w2 = np.random.rand(d1, d2)*0.001
268
+
269
+ w3 = np.random.rand(d2, d3)*0.001
270
+
271
+ #重みを1 ~0.001 に設定する部分
272
+
273
+
274
+
275
+
276
+
277
+ #バイアスの初期化 (
278
+
279
+ b1 = np.zeros(d1)
280
+
281
+ b2 = np.zeros(d2)
282
+
283
+ b3 = np.z
284
+
285
+ eros(d3)
286
+
287
+
288
+
289
+ #学習率
290
+
291
+ lr = 0.5
292
+
293
+
294
+
295
+ #バッチサイズ
296
+
297
+ batch_size = 32
298
+
299
+
300
+
301
+ #学習回数
302
+
303
+ epoch =1000
304
+
305
+
306
+
307
+ #グラフを 描写リスト
308
+
309
+ x = [0, epoch]
310
+
311
+ y = [0.100]
312
+
313
+
314
+
315
+ for i in range(epoch):
316
+
317
+ for j in range(0, x_train.shape[0], batch_size): w1, b1, w2, b2, w3, b3 = learn(x_train[j:j + batch_size], t_train[j:j + batch_size], w1, b1, w2, b2, w3, b3,
318
+
319
+ # 学習 shape[ 00 は行の大きさを調べている.ここでは, 77 .よって 0~77 の範囲でバッチサイズ文のステップ幅で数列を作成
320
+
321
+
322
+
323
+ ```
288
324
 
289
325
 
290
326