以前、splitの使い方が分からない、というタイトルで質問しましたが、本質的な質問でなかったため、
BAを出した後、再度内容を変えて質問し直しました。
Qiitaの自分でニューラルネットワークを作ろうの記事https://qiita.com/takahiro_itazuri/items/d2bea1c643d7cca11352#comment-a59cd26161ee56ea1220
これはニューラルネットワークの「精度測定」プログラムですが、これを用いて「画像認識」的なものの基盤を作りたいと思います。
そこでなのですが、記事のプログラムの
python
1 # 学習 2 epoch = 10 3 for e in range(epoch): 4 print('#epoch ', e) 5 data_size = len(training_data_list) 6 for i in range(data_size): 7 if i % 1000 == 0: 8 print(' train: {0:>5d} / {1:>5d}'.format(i, data_size)) 9 val = training_data_list[i].split(',') 10 idata = (np.asfarray(val[1:]) / 255.0 * 0.99) + 0.01 11 tdata = np.zeros(onodes) + 0.01 12 tdata[int(val[0])] = 0.99 13 nn.backprop(idata, tdata) 14 pass 15 pass
ここの、
val = training_data_list[i].split(',')
の部分の、training_data_list[i]を自分の作ったデータに変えて読み込みたいのですが、
その自分のデータというのが、紛らわしいのですが同じ名前でtraining_data_listというのですが、それをprintした結果print(training_data_list)は、
[0,・・・ 10]
これになります。
また、このデータを用いるために、記事のプログラムの
inodes = 784
の部分は、
inodes = 59
に変更しています(,の数が59個だから)。
ここで、まずこの記事のプログラムは、training_data.csvという、
5,0・・・18,126・・・略
0,・・・0,48・・・略
4,0,・・・0,0,0,0,0,67・・・略
まぁ大体こんな感じのデータを読み込んでいてtraining_data_listにしているらしく、その読み込み方としては、
training_data_list[0]に1行目、training_data_list[1]に2行目、training_data_list[3]に3行目・・・みたいにしているようです。
具体的に、記事にfor文の中で以下のようにprint
python
1val = training_data_list[i].split(',') 2print(val)
すると、
['5',・・・ '0', '0\n']
['0', ・・・(略)・・・ '0', '0\n']
['4', ・・・(略)・・・ '0']
のようになります、上から、forの1周目、2周目,3周目という事かと、また、1周目は全て表示しましたが、2,3周目は省略しています。
で、自分のデータ(同名の、training_data_list)は
[0, ・・・ 10]
これであるので、単純に「1行目」しか存在しません。後に2,3,4行目も作っていきたいのですが、今は1行目だけ、つまりforで回すのは1周分という事になります。
1周だとforの必要はありませんが、今後の事も考えてforを残しておきたい、しかし、これを上手く変換する方法が分かりません。
例えば、
python
1 val = training_data_list[i].split(',')
とすると、
--> 161 val = training_data_list[i].split(',')
162 idata = (np.asfarray(val[1:]) / 255.0 * 0.99) + 0.01
163 tdata = np.zeros(onodes) + 0.01
AttributeError: 'int' object has no attribute 'split'
となります。
かといって、一気に
val = [str(x) for x in test_data_list[e]]
とか使ってfor文外でlist化してしまえば、for文が使えなくて色々不便ですし・・・
いまいちよく分かっていません、たぶんリスト、文字、数値の区別がごちゃごちゃになっているからだと思うのですが・・・どうすればいいんでしょうか。
試した事
記事のプログラムに入る前に、
python
1training_data_list = [str(x) for x in test_data_list]
と書いて、
for文内で、
python
1 val = training_data_list[i].split(',')
と書き換えた所、
ValueError: shapes (100,59) and (0,1) not aligned: 59 (dim 1) != 0 (dim 0)
というエラーが出ました。
これって、行列の掛け算定義不能って事なんですかね??問題はそこだけ?
どうすればいいのかな。
一応この部分については解決しました、で、この後なんですが、
python
1 # テスト 2 scoreboard = [] 3 for record in test_data_list: 4 idata = (np.array(test_data_list) / 255.0 * 0.99) + 0.01 5 predict = nn.feedforward(idata) 6 plabel = np.argmax(predict) 7 print(predict) 8 print(plabel) 9 pass
このように、predict,plabelをprintしてみました、その結果が以下です。
Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
#epoch 0
train: 0 / 60
#epoch 1
train: 0 / 60
#epoch 2
train: 0 / 60
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
・・・
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
[[1.90071670e-02]
[1.31633748e-02]
[1.80385474e-02]
[1.57785464e-02]
[2.16556495e-02]
[2.28404329e-02]
[2.20554863e-02]
[2.04877793e-02]
[1.74221735e-02]
[5.64875592e-05]]
5
performance: nan
/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:160: RuntimeWarning: invalid value encountered in double_scalars
これが何を意味しているのか、今後どのように変更を加えれば良いのか、模索中です、ヒントをください。
回答2件
あなたの回答
tips
プレビュー