回答編集履歴

4

d

2019/06/04 12:32

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -173,3 +173,107 @@
173
173
  print(len(picture_list)) # 6313
174
174
 
175
175
  ```
176
+
177
+
178
+
179
+ ## 追記
180
+
181
+
182
+
183
+ > 上のやつが答えらしいのですが、自分のpcだとエラーが出ました。
184
+
185
+
186
+
187
+ 以下の2点がおかしいです。
188
+
189
+ 写し間違えではないでしょうか。
190
+
191
+
192
+
193
+ この2点を修正したところ、動作しました。
194
+
195
+
196
+
197
+ ```diff
198
+
199
+ - self.mnist = fetch_openml("database_name", version=1)
200
+
201
+ + self.mnist = fetch_openml(database_name, version=1)
202
+
203
+ ```
204
+
205
+
206
+
207
+ ```diff
208
+
209
+ - picture = mnist.make_list(5)
210
+
211
+ + picture_list = mnist.make_list(5)
212
+
213
+ ```
214
+
215
+
216
+
217
+ 修正後のコード
218
+
219
+
220
+
221
+ ```python
222
+
223
+ from sklearn.datasets import fetch_openml
224
+
225
+ import numpy as np
226
+
227
+ from PIL import Image
228
+
229
+
230
+
231
+
232
+
233
+ class Mnist:
234
+
235
+ # 初期化メソッド
236
+
237
+ def __init__(self, database_name, data_label, target_label):
238
+
239
+ self.mnist = fetch_openml(database_name, version=1) # データベースを取得
240
+
241
+ self.picture = self.mnist[data_label] # 画像データを取得
242
+
243
+ self.number = self.mnist[target_label] # ターゲット(数字)を取得
244
+
245
+
246
+
247
+ # 関数make_listは、引数(enum)として与えられた数値の画像データのリストを作成し、戻り値とする
248
+
249
+ def make_list(self, enum):
250
+
251
+ picture_list = list()
252
+
253
+
254
+
255
+ for i, num in enumerate(self.number):
256
+
257
+ n = int(num) # 収納されている数字(文字列)
258
+
259
+ if n == enum: # emuで指定した数字と一緒なら
260
+
261
+ picture_list.append(self.picture[i]) # 画像をリストに追加
262
+
263
+
264
+
265
+ return picture_list
266
+
267
+
268
+
269
+
270
+
271
+ # クラスとその関数を使って、数値5の画像リストpicuture_listを作成する
272
+
273
+ mnist = Mnist("mnist_784", "data", "target")
274
+
275
+ picture_list = mnist.make_list(5)
276
+
277
+ print(len(picture_list))
278
+
279
+ ```

3

d

2019/06/04 12:32

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -107,3 +107,69 @@
107
107
 
108
108
 
109
109
  コードの説明はだいぶ省略しているので、不明点があればコメントしてください。
110
+
111
+
112
+
113
+ ## 追記
114
+
115
+
116
+
117
+ > 教材の穴埋めで上の様な感じになっているので、できるだけ形を崩さない形で解決できないでしょうか?
118
+
119
+
120
+
121
+ 質問のコードをできるだけ変更しないで、「MNIST データセットから指定した数字の画像の一覧を取り出す」というタスクを実現するコードを以下に記載しました。
122
+
123
+
124
+
125
+ ```python
126
+
127
+ from sklearn.datasets import fetch_openml
128
+
129
+
130
+
131
+
132
+
133
+ class Mnist:
134
+
135
+ def __init__(self, database_name):
136
+
137
+ self.picture, self.number = fetch_openml(
138
+
139
+ "mnist_784", version=1, return_X_y=True
140
+
141
+ )
142
+
143
+
144
+
145
+ def make_list(self, target):
146
+
147
+ """数字 target の画像の一覧を取得する。
148
+
149
+ """
150
+
151
+ picture_list = []
152
+
153
+
154
+
155
+ for img, label in zip(self.picture, self.number):
156
+
157
+ if label == target: # ラベルが target と同じ数字の場合
158
+
159
+ picture_list.append(img)
160
+
161
+
162
+
163
+ return picture_list
164
+
165
+
166
+
167
+
168
+
169
+ mnist = Mnist("mnist_784")
170
+
171
+ picture_list = mnist.make_list("5")
172
+
173
+ print(len(picture_list)) # 6313
174
+
175
+ ```

2

d

2019/06/03 15:54

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -48,19 +48,7 @@
48
48
 
49
49
  ステップ3)
50
50
 
51
-
52
-
53
- 数字が5の画像の1枚を表示する場合、以下のようにします
51
+ matplotlib で数字が5の画像の1枚を表示する。
54
-
55
-
56
-
57
- ```python
58
-
59
- plt.imshow(target_imgs[0], cmap='gray')
60
-
61
- plt.plot()
62
-
63
- ```
64
52
 
65
53
 
66
54
 

1

s

2019/06/03 09:53

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -111,3 +111,11 @@
111
111
 
112
112
 
113
113
  ![イメージ説明](c082886bb5a138a8c78eb4668405b2ae.png)
114
+
115
+
116
+
117
+ ----
118
+
119
+
120
+
121
+ コードの説明はだいぶ省略しているので、不明点があればコメントしてください。