我正在将一组阈值应用于caffe神经网络的权重并获得精度,但是此精度比没有阈值的常规模型要低。
我尝试定义的函数将阈值作为参数,然后将其应用到神经网络并返回精度的倒数。
然后我将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] < / p>
请帮助。
谢谢。