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

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

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

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

Q&A

解決済

1回答

1071閲覧

行列積エラーが生じるが、どこが原因か分からない。2

ques346

総合スコア47

Python

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

0グッド

0クリップ

投稿2021/06/09 10:51

編集2021/06/10 09:32

ちょっと色々間違えていたので、回答を元に全体を編集しました、
しかしどう直せば良いのかいまだに分からずじまいです。

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 19plt.imshow(img) 20 21size = 5 22 23v_split = img.shape[0] // size 24h_split = img.shape[1] // size 25out_img = [] 26[out_img.extend(np.hsplit(h_img, h_split)) 27 for h_img in np.vsplit(img, v_split)] 28 29print("len(out_img)" ,len(out_img)) 30 31plt.figure(figsize=(100,100)) 32 33for i in range(len(out_img)): 34 plt.subplot(20, 20, i+1).imshow(out_img[i]) 35 36def extract(x, y): 37 # カラー画像の時Gだけ抜き取りたい 38 if len(x.shape) == 3: 39 h, w, ch = x.shape 40 41 # RGBのGだけ抜き取りたい 42 return x[:,:,y] 43 44v_max, v_min = 300, 200 45 46def diff(x): 47 imgrows, lenrows, imgcolumns, lencolumns = [], [], [], [] 48 for (img, imgt) in zip(x, x.T): 49 rows = img[(v_min<img)&(v_max>img)] 50 columns = imgt[(v_min<imgt)&(v_max>imgt)] 51 imgrows.append(rows) 52 lenrows.append(len(rows)) 53 imgcolumns.append(columns) 54 lencolumns.append(len(columns)) 55 return lenrows + lencolumns 56 57out_data_list = [[0]] * len(out_img) 58for i in range(len(out_img)): 59 out_data_list[i].append(diff(extract(out_img[i], 1)) + diff(extract(out_img[i], 2)) + diff(extract(out_img[i], 0))) 60 61# 見本データに対しても同様に 62# exについて同様に 63training_data_list = [] 64 65for i in range(len(out_img)): 66 #g #b #r 抽出後diffしてappend 67 training_data_list.append([i] + diff(extract(out_img[i], 1)) + diff(extract(out_img[i], 2)) + diff(extract(out_img[i], 0))) # 略 68 69print("training_data_list" ,training_data_list) 70print("training_data_list[1:]" ,training_data_list[1:]) 71print("len(training_data_list)" ,len(training_data_list)) 72print("len(out_data_list[0])" ,len(out_data_list[0])) 73print("out_data_list[0][0]" ,out_data_list[0][0]) 74print("out_data_list[1][0]" ,out_data_list[1][0]) 75print("out_data_list[2][0]" ,out_data_list[2][0]) 76print("out_data_list[0][1]" ,out_data_list[0][1]) 77print("out_data_list[1][1]" ,out_data_list[1][1]) 78print("len(out_data_list[1:])" ,len(out_data_list[1:])) 79print("out_data_list[0][1:]" ,out_data_list[0][1:]) 80 81# 3層ニューラルネットワーク 82class ThreeLayerNetwork: 83 # コンストラクタ 84 def __init__(self, inodes, hnodes, onodes, lr): 85 # 各レイヤーのノード数 86 self.inodes = inodes 87 self.hnodes = hnodes 88 self.onodes = onodes 89 90 # 学習率 91 self.lr = lr 92 93 # 重みの初期化 94 self.w_ih = np.random.normal(0.0, 1.0, (self.hnodes, self.inodes)) 95 self.w_ho = np.random.normal(0.0, 1.0, (self.onodes, self.hnodes)) 96 97 # 活性化関数 98 self.af = AF.sigmoid 99 self.daf = AF.derivative_sigmoid 100 101 # 誤差逆伝搬 102 def backprop(self, idata, tdata): 103 104 # 縦ベクトルに変換 105 o_i = np.array(idata, ndmin=2).T 106 t = np.array(tdata, ndmin=2).T 107 108 # 隠れ層 109 np.set_printoptions(threshold=10000) 110 x_h = np.dot(self.w_ih, o_i) 111 o_h = self.af(x_h) 112 113 # 出力層 114 x_o = np.dot(self.w_ho, o_h) 115 o_o = self.af(x_o) 116 117 # 誤差計算 118 e_o = (t - o_o) 119 e_h = np.dot(self.w_ho.T, e_o) 120 121 # 重みの更新 122 self.w_ho += self.lr * np.dot((e_o * self.daf(o_o)), o_h.T) 123 self.w_ih += self.lr * np.dot((e_h * self.daf(o_h)), o_i.T) 124 125 126 # 順伝搬 127 def feedforward(self, idata): 128 # 入力のリストを縦ベクトルに変換 129 o_i = np.array(idata, ndmin=2).T 130 131 # 隠れ層 132 x_h = np.dot(self.w_ih, o_i) 133 o_h = self.af(x_h) 134 135 # 出力層 136 x_o = np.dot(self.w_ho, o_h) 137 o_o = self.af(x_o) 138 139 return o_o 140 141if __name__=='__main__': 142 # パラメータ 143 #inodes=784から30に変更 144 inodes = 30 145 hnodes = 100 146 onodes = 400 147 lr = 0.3 148 149 # ニューラルネットワークの初期化 150 nn = ThreeLayerNetwork(inodes, hnodes, onodes, lr) 151 152 # 学習 153 epoch = 50 154 for e in range(epoch): 155 print('#epoch ', e) 156 data_size = len(training_data_list) 157 for i in range(data_size): 158 if i % 1000 == 0: 159 print(' train: {0:>5d} / {1:>5d}'.format(i, data_size)) 160 idata = (np.array(training_data_list[i][1:]) / 255.0 * 0.99) + 0.01 161 # 変更の余地あり 162 tdata = np.zeros(onodes) + 0.01 163 tdata[training_data_list[i][0]] = 0.99 164 nn.backprop(idata, tdata) 165 pass 166 pass 167 168 # テスト 169 scoreboard = [] 170 for i in range(len(out_data_list)): 171 idata = (np.array(out_data_list[i][1:]) / 255.0 * 0.99) + 0.01 172 predict = nn.feedforward(idata) 173 plabel = np.argmax(predict) 174 print("plabel" ,plabel) 175 pass 176 177 scoreboard_array = np.asarray(scoreboard) 178 print('performance: ', scoreboard_array.sum() / scoreboard_array.size)
Mounted at /content/drive len(out_img) 400 training_data_list [[0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] 中略 [394, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [395, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [396, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [397, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [398, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [399, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]] len(training_data_list) 400 len(out_data_list[0]) 401 out_data_list[0][0] 0 out_data_list[1][0] 0 out_data_list[2][0] 0 out_data_list[0][1] [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] out_data_list[1][1] [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] len(out_data_list[1:]) 399 out_data_list[0][1:] [[5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] 中略 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5]] #epoch 0 train: 0 / 400 中略 #epoch 49 train: 0 / 400 plabel 148800 中略 plabel 148800 performance: nan /usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:178: RuntimeWarning: invalid value encountered in double_scalars

何がおかしいかというと、plavelが全て14880なんです、全て同じというのは、同じことの繰り返しになっているわけではないんでしょうか、いずれにせよ、これではプログラムの意味がない・・・。

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

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

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

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

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

K_3578

2021/06/10 06:46

なぜこの質問文のままで見やすいと思うのか不思議だ。 普通code機能で囲むだろう
guest

回答1

0

ベストアンサー

「# テスト」よりも上のどこかに下記を追加して実行して、その結果表示を見たら、分かると思います

python

1print(len(out_data_list[0])) 2print(len(out_data_list[0][0])) 3print(out_data_list[0][0])

投稿2021/06/10 01:34

jbpb0

総合スコア7653

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

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

ques346

2021/06/10 05:21

print lenは結構やってるのですが、言われた通り後でやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問