前提・実現したいこと
「ゼロから作るディープラーニング」
7章
畳み込みニューラルネットワーク
でSampleCodeは実行できましたが、入力画像を変えて
120(高さ)x160(幅)の画像を入力して
train_covnet.pyを実行すると
演算途中でエラーで停止します。
発生している問題・エラーメッセージ
SimpleConvNetで
class Affine
def forward
out = np.dot(self.x self.W) + self.b
部分の行列の内積で dimが合っていないようです。
画像のH=60 W=160 条件化のエラーコード ValueError: shapes (100,19656) and (7056,2000) not aligned: 19656 (dim 1) != 7056 (dim 0)
場所は以下 trainer.train()/self.train_step()/self.loss(x, t)/y = self.predict(x)/x = layer.forward(x)/out = np.dot(self.x, self.W) + self.b
該当のソースコード
SimpleConvNetの設定は
network=SimpleConvNet(input_dim=(1,60,160),conv_param = {'filter_num': 9, 'filter_size': 5, 'pad': 0, 'stride': 1}, hidden_size=2000, output_size=4, weight_init_std=0.01)
trainer = Trainer(network, x_train, t_train, x_test, t_test,
epochs=max_epochs, mini_batch_size=100,
optimizer='Adam', optimizer_param={'lr': 0.001},
evaluate_sample_num_per_epoch=1000)
trainer.train()
試したこと
幾つかのパラメーターを 振って、エラーログを見てみました。
計算方程式を作り、満たす解をもとめてみましたが ありませんでした。
全結合の入力は
W= 係数xpool_out_size,hidden_sizeで決定されます。
def forward
out = np.dot(self.x self.W) + self.b
のxは、エラーログからxのサイズは、
①filter_num
②入力画像のW,H
③filter_size
④Pad
⑤strideに依存しますが
今はpad=0 stride=1にしているので依存は①-③までです。
sample Codeだと高さ=幅の画像しか扱えないような
計算式になっているように思えますが、何か
これを打開する方法はありますでしょうか?
補足情報(FW/ツールのバージョンなど)
少しだけ、不思議なのは、ここでは、Wはpool_out_sizeで規定される
し、CONVの出力もpool_out_sizeですが、
out = np.dot(self.x self.W) + self.b
はxは入力画像をもとに計算された大きさになっている事です。
つまり入力画像をもとに計算された値とWの内積をしている事です。
Python 3.6.1
Ubuntu 16.04 LTS
回答1件
あなたの回答
tips
プレビュー