質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1562閲覧

for文の意味について

ques346

総合スコア47

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2021/06/07 23:57

自分で作っておいてなんですが、

python

1 # テスト 2 scoreboard = [] 3 for record in test_data_list: 4 idata = (np.array(out_data_list0) / 255.0 * 0.99) + 0.01 5 predict = nn.feedforward(idata) 6 plabel = np.argmax(predict) 7 print("predict" ,predict) 8 print("plabel" ,plabel) 9 pass 10 11 scoreboard_array = np.asarray(scoreboard) 12 print('performance: ', scoreboard_array.sum() / scoreboard_array.size)

このfor文ってrecord使われてないし、回してるの1回だけですよね??forの意味ないですかね?
これに関する質問をここで更にするかも知れません。

以下コード全文です。

python

1from google.colab import drive 2drive.mount('/content/drive') 3 4import sys 5import numpy as np 6import matplotlib.pyplot as plt 7 8sys.path.append('/content/drive/My Drive') 9 10import ActivationFunction as AF 11 12from PIL import Image 13from IPython.display import display 14 15img = Image.open("drive/My Drive/mnist_dataset/rei.jpeg") 16img = img.resize((100, 100)) 17img = np.asarray(img) 18 19size = 5 20 21v_split = img.shape[0] // size 22h_split = img.shape[1] // size 23out_img = [] 24[out_img.extend(np.hsplit(h_img, h_split)) 25 for h_img in np.vsplit(img, v_split)] 26 27plt.subplot(17, 6, 1).imshow(out_img[1]) 28plt.subplot(17, 6, 2).imshow(out_img[2]) 29plt.subplot(17, 6, 3).imshow(out_img[3]) 30plt.subplot(17, 6, 4).imshow(out_img[4]) 31plt.subplot(17, 6, 5).imshow(out_img[5]) 32plt.subplot(17, 6, 6).imshow(out_img[6]) 33plt.subplot(17, 6, 7).imshow(out_img[7]) 34plt.subplot(17, 6, 8).imshow(out_img[8]) 35plt.subplot(17, 6, 9).imshow(out_img[9]) 36plt.subplot(17, 6, 10).imshow(out_img[10]) 37plt.subplot(17, 6, 11).imshow(out_img[11]) 38plt.subplot(17, 6, 12).imshow(out_img[12]) 39plt.subplot(17, 6, 13).imshow(out_img[13]) 40plt.subplot(17, 6, 14).imshow(out_img[14]) 41plt.subplot(17, 6, 15).imshow(out_img[15]) 42plt.subplot(17, 6, 16).imshow(out_img[16]) 43plt.subplot(17, 6, 17).imshow(out_img[17]) 44plt.subplot(17, 6, 18).imshow(out_img[18]) 45plt.subplot(17, 6, 19).imshow(out_img[19]) 46plt.subplot(17, 6, 20).imshow(out_img[20]) 47plt.subplot(17, 6, 21).imshow(out_img[21]) 48plt.subplot(17, 6, 22).imshow(out_img[22]) 49plt.subplot(17, 6, 23).imshow(out_img[23]) 50plt.subplot(17, 6, 24).imshow(out_img[24]) 51plt.subplot(17, 6, 25).imshow(out_img[25]) 52plt.subplot(17, 6, 26).imshow(out_img[26]) 53plt.subplot(17, 6, 27).imshow(out_img[27]) 54plt.subplot(17, 6, 28).imshow(out_img[28]) 55plt.subplot(17, 6, 29).imshow(out_img[29]) 56plt.subplot(17, 6, 30).imshow(out_img[30]) 57plt.subplot(17, 6, 31).imshow(out_img[31]) 58plt.subplot(17, 6, 32).imshow(out_img[32]) 59 60# PILで開いたうえでデータをNumpy形式にする 61# (例えばJPEGは圧縮されていてNumpyな配列になっていないので、 62# そこからNumpyのデータ空間(?)に持ってくる必要がある) 63tefilename = "test2.png" 64teimg = Image.open("drive/My Drive/mnist_dataset/" + tefilename) 65teimg = teimg.resize((10, 10)) 66teimg = np.asarray(teimg) 67 68def extract(x, y): 69 # カラー画像の時Gだけ抜き取りたい 70 if len(x.shape) == 3: 71 h, w, ch = x.shape 72 73 # RGBのGだけ抜き取りたい 74 return x[:,:,y] 75 76v_max, v_min = 300, 200 77 78def diff(x): 79 imgrows, lenrows, imgcolumns, lencolumns = [], [], [], [] 80 for (img, imgt) in zip(x, x.T): 81 rows = img[(v_min<img)&(v_max>img)] 82 columns = imgt[(v_min<imgt)&(v_max>imgt)] 83 imgrows.append(rows) 84 lenrows.append(len(rows)) 85 imgcolumns.append(columns) 86 lencolumns.append(len(columns)) 87 return lenrows + lencolumns 88 89test_data_list = [] 90 91test_data_list.append([0] + diff(extract(teimg, 1)) + diff(extract(teimg, 2)) + diff(extract(teimg, 0))) # 略 92 93out_data_list0 = [] 94 95out_data_list0.append([0] + diff(extract(out_img[0], 1)) + diff(extract(out_img[0], 2)) + diff(extract(out_img[0], 0))) 96 97out_data_list1 = [] 98 99out_data_list1.append([0] + diff(extract(out_img[1], 1)) + diff(extract(out_img[1], 2)) + diff(extract(out_img[1], 0))) 100 101# 見本データに対しても同様に 102# exについて同様に 103training_data_list = [] 104 105for i in range(10): 106 for e in range(1): 107 trad = Image.open("drive/My Drive/mnist_dataset/" + str(10*i+e) + ".png") 108 trad = trad.resize((10, 10)) 109 trad = np.asarray(trad) 110 #g #b #r 抽出後diffしてappend 111 training_data_list.append([i] + diff(extract(trad, 1)) + diff(extract(trad, 2)) + diff(extract(trad, 0))) # 略 112 113print("training_data_list" ,training_data_list) 114print("training_data_list[1:]" ,training_data_list[1:]) 115 116# 3層ニューラルネットワーク 117class ThreeLayerNetwork: 118 # コンストラクタ 119 def __init__(self, inodes, hnodes, onodes, lr): 120 # 各レイヤーのノード数 121 self.inodes = inodes 122 self.hnodes = hnodes 123 self.onodes = onodes 124 125 # 学習率 126 self.lr = lr 127 128 # 重みの初期化 129 self.w_ih = np.random.normal(0.0, 1.0, (self.hnodes, self.inodes)) 130 self.w_ho = np.random.normal(0.0, 1.0, (self.onodes, self.hnodes)) 131 132 # 活性化関数 133 self.af = AF.sigmoid 134 self.daf = AF.derivative_sigmoid 135 136 # 誤差逆伝搬 137 def backprop(self, idata, tdata): 138 139 # 縦ベクトルに変換 140 o_i = np.array(idata, ndmin=2).T 141 t = np.array(tdata, ndmin=2).T 142 143 # 隠れ層 144 np.set_printoptions(threshold=10000) 145 x_h = np.dot(self.w_ih, o_i) 146 o_h = self.af(x_h) 147 148 # 出力層 149 x_o = np.dot(self.w_ho, o_h) 150 o_o = self.af(x_o) 151 152 # 誤差計算 153 e_o = (t - o_o) 154 e_h = np.dot(self.w_ho.T, e_o) 155 156 # 重みの更新 157 self.w_ho += self.lr * np.dot((e_o * self.daf(o_o)), o_h.T) 158 self.w_ih += self.lr * np.dot((e_h * self.daf(o_h)), o_i.T) 159 160 161 # 順伝搬 162 def feedforward(self, idata): 163 # 入力のリストを縦ベクトルに変換 164 o_i = np.array(idata, ndmin=2).T 165 166 # 隠れ層 167 x_h = np.dot(self.w_ih, o_i) 168 o_h = self.af(x_h) 169 170 # 出力層 171 x_o = np.dot(self.w_ho, o_h) 172 o_o = self.af(x_o) 173 174 return o_o 175 176if __name__=='__main__': 177 # パラメータ 178 #inodes=784から30に変更 179 inodes = 31 180 hnodes = 100 181 onodes = 10 182 lr = 0.3 183 184 # ニューラルネットワークの初期化 185 nn = ThreeLayerNetwork(inodes, hnodes, onodes, lr) 186 187 # 学習 188 epoch = 50 189 # 50000 190 for e in range(epoch): 191 print('#epoch ', e) 192 data_size = len(training_data_list) 193 for i in range(data_size): 194 if i % 1000 == 0: 195 print(' train: {0:>5d} / {1:>5d}'.format(i, data_size)) 196 idata = (np.array(out_data_list1) / 255.0 * 0.99) + 0.01 197 # 変更の余地あり 198 tdata = np.zeros(onodes) + 0.01 199 tdata[out_data_list1[0]] = 0.99 200 nn.backprop(idata, tdata) 201 pass 202 pass 203 204 # テスト 205 scoreboard = [] 206 for record in test_data_list: 207 idata = (np.array(out_data_list0) / 255.0 * 0.99) + 0.01 208 predict = nn.feedforward(idata) 209 plabel = np.argmax(predict) 210 print("predict" ,predict) 211 print("plabel" ,plabel) 212 pass 213 214 scoreboard_array = np.asarray(scoreboard) 215 print('performance: ', scoreboard_array.sum() / scoreboard_array.size)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2021/06/08 00:04

なぜ回してるの1回だけだと推測しているのかを書かないと他人には伝わらないですよ。
ques346

2021/06/08 00:12

recordがないから?forの中に
quickquip

2021/06/08 00:18

「recordがないから」という理由で「回してるのが1回だけ」なのでは? と思ったということですか? そういう思考の過程は質問に書きましょう。 こういう状態で「確かにそうですね、1回しか回らないので不要そうですね」という回答が付いた時、その回答者とあなたの間では何の情報も交換されていなく、双方で全然違うことを考えているのにやりとりだけはつじつまが合っているという状況になりえますよね。
meg_

2021/06/08 00:21

> 回してるの1回だけですよね?? そう思った理由は何でしょうか?
jbpb0

2021/06/08 01:34

「test_data_list」の中身が複数なら、Zuishinさんが回答に書いてるように、forループは複数回回りますけど、それが意味あるかは、forループ内が複数回実行される必要があるかどうか、によりますよね コードの詳細読んでないので外してるかもしれませんが、毎回同じ「out_data_list0」を使ってるから、結果は毎回同じになるのでは? ループ内を実行する度に「out_data_list0」の内容が変わるのなら、結果変わるのでしょうけど もし、ループの毎回で結果同じなら、ループ回す必要ないですよね
guest

回答2

0

ベストアンサー

record を使おうが使うまいが test_data_list の要素数だけループします。
test_data_list の要素数が常に 1 なら for の必要はないでしょうが、そうでないなら必要でしょう。

投稿2021/06/08 00:21

Zuishin

総合スコア28669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

それがどんな状況でも一回しか回らない、というのがわかってるなら、forの意味はないでしょうね。

投稿2021/06/08 00:02

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問