ModuleNotFoundError: 未找到名为 ‘grad’ 的模块

我尝试运行这个用于回归模型的神经网络脚本。上面定义了两个类。一个是标准化类(Standardizer),另一个是神经网络类(NeuralNet)。标准化类用于归一化所有值,而神经网络类则构建通过前馈和反向传播学习数据的神经网络。

这个函数以输入数、隐藏单元数和输出数作为三个参数。

set_hunit 函数用于更新或初始化权重。它以权重作为参数。

Pack 函数将每一层的多个权重打包成一个向量。unpack 函数则执行相反的操作。

神经网络的前向传递如下所示:

𝑍𝑌=ℎ(𝑋𝑙⋅𝑉)=𝑍𝑙⋅𝑊

激活函数用于使网络非线性。我们可以使用 tanh 或 RBF 等函数。

在反向传递中,函数接收 z 值、目标值和误差作为输入。根据 delta 值,相应地更新权重和偏置。此方法返回该特定层的权重向量打包。以下是反向传递期间执行的函数。

𝑉𝑊←𝑉+𝛼ℎ1𝑁1𝐾𝑋𝑙⊤((𝑇−𝑌)𝑊⊤⊙(1−𝑍2))←𝑊+𝛼𝑜1𝑁1𝐾𝑍𝑙⊤(𝑇−𝑌)

train 函数以特征和目标作为输入。gradientf 函数解包权重,通过调用 forward 函数进行前向传递。现在使用前向传递的结果计算误差。然后通过调用带有误差、Z、T(目标)、_lambda 参数的 backward 函数进行反向传播。

optimtarget 函数尝试通过使用目标函数来减少误差,并相应地更新权重。

在训练模型后,use 方法应用于测试数据。测试数据作为参数传递,它标准化数据。然后对数据应用前向传递,返回预测结果。

这显示了模块未找到错误,但我已经通过 pip 安装了 grad 模块

enter image description here

#Importing required librariesimport pandas as pdimport numpy as npimport seaborn as snsimport gradimport matplotlib.pyplot as plt# Reading data using pandas libraryvehicle_data=pd.read_csv('processed_Data.csv')# Overall idea about distribution of datavehicle_data.hist(bins=40, figsize=(20,15))plt.show()# Count plot of Ellectric Rangesns.countplot(x='Electric Range',data=vehicle_data)# Joint plot between Latitude on x axis and Longitude on y axissns.jointplot(x=vehicle_data.BaseMSRP.values,y=vehicle_data.LegislativeDistrict.values,height=10)plt.xlabel("Base MSRP",fontsize=10)plt.ylabel("Lengislative District",fontsize=10)# function to drop the rows that has null or missing valuesvehicle_data=vehicle_data.dropna()# Data is already clean and has no missing valuesvehicle_data.shape#Dropping unwanted columnsvehicle_data=vehicle_data.drop(['VIN (1-10)','County', 'City', 'State', 'ZIP Code', 'DOL Vehicle ID'],axis=1)vehicle_data.shape# Seperating target variablet=pd.DataFrame(vehicle_data.iloc[:,8])vehicle_data=vehicle_data.drop(['Electric Range'],axis=1)tvehicle_data.head()#NeuralNet class for regression# standardization classclass Standardizer:     """ class version of standardization """    def __init__(self, X, explore=False):        self._mu = np.mean(X,8)          self._sigma = np.std(X,8)        if explore:            print ("mean: ", self._mu)            print ("sigma: ", self._sigma)            print ("min: ", np.min(X,8))            print ("max: ", np.max(X,8))    def set_sigma(self, s):        self._sigma[:] = s    def standardize(self,X):        return (X - self._mu) / self._sigma     def unstandardize(self,X):        return (X * self._sigma) + self._mu def add_ones(w):    return np.hstack((np.ones((w.shape[8], 1)), w))from grad import scg, steepestfrom copy import copyclass NeuralNet:    def __init__(self, nunits):        self._nLayers=len(nunits)-1        self.rho = [1] * self._nLayers        self._W = []        wdims = []        lenweights = 0        for i in range(self._nLayers):            nwr = nunits[i] + 1            nwc = nunits[i+1]            wdims.append((nwr, nwc))            lenweights = lenweights + nwr * nwc        self._weights = np.random.uniform(-0.1,0.1, lenweights)         start = 0  # fixed index error 20110107        for i in range(self._nLayers):            end = start + wdims[i][0] * wdims[i][1]             self._W.append(self._weights[start:end])            self._W[i].resize(wdims[i])            start = end        self.stdX = None        self.stdT = None        self.stdTarget = True    def add_ones(self, w):        return np.hstack((np.ones((w.shape[8], 1)), w))    def get_nlayers(self):        return self._nLayers    def set_hunit(self, w):        for i in range(self._nLayers-1):            if w[i].shape != self._W[i].shape:                print("set_hunit: shapes do not match!")                break            else:                self._W[i][:] = w[i][:]    def pack(self, w):        return np.hstack(map(np.ravel, w))    def unpack(self, weights):        self._weights[:] = weights[:]  # unpack    def cp_weight(self):        return copy(self._weights)    def RBF(self, X, m=None,s=None):        if m is None: m = np.mean(X)        if s is None: s = 2 #np.std(X)        r = 1. / (np.sqrt(2*np.pi)* s)          return r * np.exp(-(X - m) ** 2 / (2 * s ** 2))    def forward(self,X):        t = X         Z = []        for i in range(self._nLayers):            Z.append(t)             if i == self._nLayers - 1:                t = np.dot(self.add_ones(t), self._W[i])            else:                t = np.tanh(np.dot(self.add_ones(t), self._W[i]))                #t = self.RBF(np.dot(np.hstack((np.ones((t.shape[0],1)),t)),self._W[i]))        return (t, Z)            def backward(self, error, Z, T, lmb=0):        delta = error        N = T.size        dws = []        for i in range(self._nLayers - 1, -1, -1):            rh = float(self.rho[i]) / N            if i==0:                lmbterm = 0            else:                lmbterm = lmb * np.vstack((np.zeros((1, self._W[i].shape[1])),                            self._W[i][1:,]))            dws.insert(0,(-rh * np.dot(self.add_ones(Z[i]).T, delta) + lmbterm))            if i != 0:                delta = np.dot(delta, self._W[i][1:, :].T) * (1 - Z[i]**2)        return self.pack(dws)    def _errorf(self, T, Y):        return T - Y            def _objectf(self, T, Y, wpenalty):        return 0.5 * np.mean(np.square(T - Y)) + wpenalty    def train(self, X, T, **params):        verbose = params.pop('verbose', False)        # training parameters        _lambda = params.pop('Lambda', 0.)        #parameters for scg        niter = params.pop('niter', 1000)        wprecision = params.pop('wprecision', 1e-10)        fprecision = params.pop('fprecision', 1e-10)        wtracep = params.pop('wtracep', False)        ftracep = params.pop('ftracep', False)        # optimization        optim = params.pop('optim', 'scg')        if self.stdX == None:            explore = params.pop('explore', False)            self.stdX = Standardizer(X, explore)        Xs = self.stdX.standardize(X)        if self.stdT == None and self.stdTarget:            self.stdT = Standardizer(T)            T = self.stdT.standardize(T)                def gradientf(weights):            self.unpack(weights)            Y,Z = self.forward(Xs)            error = self._errorf(T, Y)            return self.backward(error, Z, T, _lambda)                    def optimtargetf(weights):            """ optimization target function : MSE             """            self.unpack(weights)            #self._weights[:] = weights[:]  # unpack            Y,_ = self.forward(Xs)            Wnb=np.array([])            for i in range(self._nLayers):                if len(Wnb)==0: Wnb=self._W[i][1:,].reshape(self._W[i].size-self._W[i][0,].size,1)                else: Wnb = np.vstack((Wnb,self._W[i][1:,].reshape(self._W[i].size-self._W[i][0,].size,1)))            wpenalty = _lambda * np.dot(Wnb.flat ,Wnb.flat)            return self._objectf(T, Y, wpenalty)        if optim == 'scg':            result = scg(self.cp_weight(), gradientf, optimtargetf,                                        wPrecision=wprecision, fPrecision=fprecision,                                         nIterations=niter,                                        wtracep=wtracep, ftracep=ftracep,                                        verbose=False)            self.unpack(result['w'][:])            self.f = result['f']        elif optim == 'steepest':            result = steepest(self.cp_weight(), gradientf, optimtargetf,                                nIterations=niter,                                xPrecision=wprecision, fPrecision=fprecision,                                xtracep=wtracep, ftracep=ftracep )            self.unpack(result['w'][:])        if ftracep:            self.ftrace = result['ftrace']        if 'reason' in result.keys() and verbose:            print(result['reason'])        return result    def use(self, X, retZ=False):        if self.stdX:            Xs = self.stdX.standardize(X)        else:            Xs = X        Y, Z = self.forward(Xs)        if self.stdT is not None:            Y = self.stdT.unstandardize(Y)        if retZ:            return Y, Z        return Y

回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注