私は 1 つを構築していますが、lenet の例で提供されているカスタム トレイン関数を 110 より大きいバッチ サイズで使用すると、精度が 1 (100%) より大きくなります。
バッチ サイズ 32 を使用すると、30% の精度が得られます。バッチ サイズが 64 の場合、正味の精度は 64 です。バッチ サイズが 128 の場合、精度は 1.2 です。
私の画像は 32x32 です。データセットのトレーニング: ニュートラルな顔の 56 枚の画像。驚きの顔画像60枚。テスト データセット: ニュートラルな顔の 15 枚の画像。驚きの顔画像15枚。
これは私のコードです:
def train(solver):
niter = 200
test_interval = 25
train_loss = zeros(niter)
test_acc = zeros(int(np.ceil(niter / test_interval)))
output = zeros((niter, 32, 2))
for it in range(niter):
solver.step(1)
train_loss[it] = solver.net.blobs['loss'].data
solver.test_nets[0].forward(start='conv1')
output[it] = solver.test_nets[0].blobs['ip2'].data[:32]
if it % test_interval == 0:
print 'Iteration', it, 'testing...'
correct = 0
for test_it in range(100):
solver.test_nets[0].forward()
correct += sum(solver.test_nets[0].blobs['ip2'].data.argmax(1) == solver.test_nets[0].blobs['label'].data)
test_acc[it // test_interval] = correct / 1e4
では、私のコードの何が問題なのですか?