Минимизация Scipy для нейронной сети кафе дает то же начальное условие, что и результат - PullRequest
0 голосов
/ 24 сентября 2018

Я применяю набор порогов к весам нейронной сети кафе и получаю точность. Но эта точность меньше, чем у обычной модели без порога.

Я пытался определить функциюкоторый принимает порог в качестве параметра и применяет его к нейронной сети и возвращает ответное значение точности.

Затем я использовал scipt.optimization.minimize с методом SLSQP для настройки этого порога, напримерчто он дает максимальную точность.

import numpy as np
import caffe
from scipy.optimize import minimize
from kernel_apprx import *
import time



def objective(ths):
    #return ths[0]**2+ths[1]**2
    net=caffe.Net('cifar10_quick_customised_opt.prototxt','cifar10_quick_iter_4000.caffemodel',caffe.TEST)
    k_aprox(net,"conv1","conv1_cus",ths[0],ths[1])
    net.forward()
    acc=net.blobs["accuracy"].data*100
    print "################## report #################\n\tthresholds: %s\n\taccuracy: %.16f%%"%(ths,acc)
    return 1/float(acc)





con={'type':'ineq','fun':con1}
constr=[con]


th0=[0.01,0.98]
b1=(0.0001,1.0)


bnds=(b1,b1)
tic=time.time()
sol=minimize(objective,th0,method='SLSQP',bounds=bnds,options={'disp': True ,'eps' : 1e-4,'ftol': 1e-10})

Здесь «цель» - это функция, содержащая нейронную сеть.Но когда я запускаю его, он выполняется примерно за 3 итерации и дает то же начальное условие, что и результат, независимо от того, что я поместил в начальное условие, говоря: «Оптимизация успешно завершена». В приведенном выше примере возвращается [0.2,0.98]

, пожалуйста, помогите.

спасибо.

...