Я применяю набор порогов к весам нейронной сети кафе и получаю точность. Но эта точность меньше, чем у обычной модели без порога.
Я пытался определить функциюкоторый принимает порог в качестве параметра и применяет его к нейронной сети и возвращает ответное значение точности.
Затем я использовал 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]
, пожалуйста, помогите.
спасибо.