【问题标题】:How to make my logistic regression run faster?如何让我的逻辑回归运行得更快?
【发布时间】:2020-07-13 01:06:06
【问题描述】:

我的逻辑回归代码对 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()

【问题讨论】:

  • 为什么不使用 scikit-learn ?
  • 我是机器学习的新手,所以想从头开始编写逻辑回归,所以我猜使用 scikit learn 没有任何意义。如果我错了,请纠正我
  • Scikit-learn 逻辑回归实现比你的实现效率更高,所以它应该比你的实现更快。

标签: python numpy machine-learning neural-network logistic-regression


【解决方案1】:

我认为您无法优化此代码以使其变得比这更快,可能由于数组的大小而需要很长时间,您可以尝试使用已经具有逻辑回归的库(scikit-learn ),它可能会为您节省很多时间。

【讨论】:

  • 我是机器学习的新手,所以想从头开始编写逻辑回归,所以我猜使用 scikit learn 没有任何意义。如果我错了,请纠正我。
  • 是的,如果您的目的是学习,也许尝试从头开始创建它可能是一个好主意,但是您为什么不在诸如 iris 之类的玩具数据集中尝试您的模型呢?它肯定会运行得非常快,你不必担心这样的小事
  • 当使用真实数据集时,对于初学者来说真的很值得。很高兴知道您的简单代码可以识别图像
  • 我了解,但是执行此操作的 ML 代码通常会使用大量的处理能力来更快地运行,如果您想要更多的处理能力,您可以使用云计算,即使我认为这不是必要的你的情况。
猜你喜欢
  • 2019-08-04
  • 2017-03-19
  • 2018-08-23
  • 1970-01-01
  • 2021-05-11
  • 2017-08-28
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多