Мой логист c Код регрессии занимает полчаса на 1000 итераций для 1000 изображений. Как сделать это быстрее. После 6000 итераций я получил точность примерно 75%. Но это заняло 3+ часа. Код уже векторизован, но все же он медленный
from PIL import Image
import numpy as np
import cv2
import os
import pickle
import sys
np.set_printoptions(threshold=sys.maxsize)
p1=open("p1.pickle","rb")
p2=open("p2.pickle","rb")
al=0.4
iteration=6000
def prep_data():
a=cv2.imread(r"D:\New folder\New folder\cd\001cat.jpg")
a=cv2.resize(a,(200,200))
a=np.reshape(a,[120000,1])
Y=np.ones((1))
for im in os.listdir(r"D:\New folder\New folder\cd"):
b=cv2.imread("D:\\New folder\\New folder\\cd\\" + im)
if im[3]=='c':
Y=np.hstack((Y,[1]))
else:
Y=np.hstack((Y,[0]))
b=cv2.resize(b,(200,200))
b=np.reshape(b,[120000,1])
a=np.hstack((a,b))
Y=Y.reshape(1,Y.shape[0])
return(a,Y.shape[0],Y)
def sigmoid(x):
return(1/(1+np.exp(-x)))
##X,ccount,Y=prep_data()
##pickle.dump([X,ccount,Y],p1)
X,ccount,Y=pickle.load(p1)
W=np.zeros(120000).reshape(120000,1)
b=0
def learn():
global W,X,b
for x in range(iteration):
print("iteration "+str(x))
Z=np.dot(W.T,X)+b
A=sigmoid(Z)
dZ=A-Y
dW=(1/(ccount))*np.dot(X,dZ.T)
dB=(1/(ccount))*np.sum(dZ)
W=W-al*dW
b=b-al*dB
return(W,b)
W,b=learn()
##W,b=pickle.load(p2)
##pickle.dump([W,b],p2)
I=cv2.imread("D:\\New folder\\test1\\10.jpg")
I=cv2.resize(I,(200,200))
I=np.reshape(I,[120000,1])
print(sigmoid(np.dot(W.T,I)+b))
p1.close()
p2.close()