人工神经网络_制作属于自己的人工神经网络

在本文中,我已经实现了具有Dropout和L2正则化的人工神经网络的完全向量化代码。

在本文中,我实现了一个在多个数据集上测试的人工神经网络的完全向量化python代码。此外,并对Dropout和L2正则化技术进行了实现和详细说明。

强烈建议通过人工神经网络的基本工作,正向传播和反向传播。

本文分为10个部分:

  1. 介绍
  2. 先决条件
  3. 导入我们的库
  4. 激活函数及求导
  5. 神经网络类
  6. 初始化权重和偏差
  7. 正向传播
  8. 成本函数
  9. 反向传播
  10. 预测新数据集的标签

1.简介

人工神经网络是监督深度学习中最简单和最基本的概念之一。它可用于执行多个任务,如二进制或分类。它看起来很容易理解和实现。在编写这样一个网络的过程中,会出现一些小问题,这些问题会导致很大的错误,并帮助您理解以前忽略的概念。因此,在本文中,我尝试实现一个人工神经网络,它可能会帮助您节省正确编码和理解主题的每个概念所需的工作时间。

2.先决条件

我假设你知道神经网络是什么以及它们是如何学习的。如果你对Python和像numpy这样的库很熟悉的话,这将很容易理解。另外,还需要对线性代数和微积分知识有很好的了解,以便于轻松地理解正向和反向传播部分。此外,我强烈建议您阅读Andrew Ng在Coursera上的课程视频(https://www.coursera.org/ ; https://www.deeplearning.ai/ )。

3.导入我们的库

现在,我们可以开始对神经网络进行编码了。第一件事是需要导入我们实现网络所需的所有库。

# Importing the librariesimport numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport warningsimport timewarnings.filterwarnings('ignore');import osimport sys
cba287ebef1d35e566bd480b41ba1ba4.png

我们将使用pandas导入和清理我们的数据集。Numpy 是执行矩阵代数和复杂计算的最重要的库。

4.激活函数及求导

在本文后面的部分中,我们将需要激活函数来执行正向传播。另外,我们还需要在反向传播过程中对激活函数求导。

所以,让我们编写一些激活函数。

def sigmoid(z) : """ Reutrns the element wise sigmoid function. """ return 1./(1 + np.exp(-z))def sigmoid_prime(z) : """ Returns the derivative of the sigmoid function. """ return sigmoid(z)*(1-sigmoid(z))def ReLU(z) :  """ Reutrns the element wise ReLU function. """ return (z*(z > 0))def ReLU_prime(z) : """ Returns the derivative of the ReLU function. """ return 1*(z>=0)def lReLU(z) :  """ Reutrns the element wise leaky ReLU function. """ return np.maximum(z/100,z)def lReLU_prime(z) : """ Returns the derivative of the leaky ReLU function. """ z = 1*(z>=0) z[z==0] = 1/100 return zdef tanh(z) : """ Reutrns the element wise hyperbolic tangent function. """ return np.tanh(z)def tanh_prime(z) :  """ Returns the derivative of the tanh function. """ return (1-tanh(z)**2)# A dictionary of our activation functionsPHI = {'sigmoid':sigmoid, 'relu':ReLU, 'lrelu':lReLU, 'tanh':tanh}# A dictionary containing the derivatives of our activation functionsPHI_PRIME = {'sigmoid':sigmoid_prime, 'relu':ReLU_prime, 'lrelu':lReLU_prime, 'tanh':tanh_prime}
67133cf4a0256071a28a674e477888ca.png

我们有四种最流行的激活函数。首先是常规的sigmoid激活函数。

092607636620d37845086435fd75fb7f.png

我们有ReLU或“ 线性整流函数 ”。我们将主要使用这个激活函数。注意,我们将保持ReLU 0的导数在点0处。

704f1a1d7a3efe7bb2b6f4a7fd908ed5.png

我们还有一个ReLU的扩展版本叫做Leaky ReLU。它的工作原理与ReLU类似,可以在某些数据集上提供更好的结果(不一定是全部)。

我们还有tanh(双曲正切)激活函数。它也被广泛使用,并且几乎总是优于sigmoid。

5b6bfbc46b548166b198344dfa1e7e98.png

另外,PHI和PHI_PRIME是分别包含激活函数及其导数的python字典。

5.我们的神经网络类

在本节中,我们将创建并初始化我们的神经网络类。首先,我们将决定在初始化期间使用哪些参数。我们需要:

  1. 每层神经元的数量
  2. 我们想在每一层中使用激活函数
  3. 我们的特征矩阵(X包含行特征和列特征)。
  4. 特征矩阵对应的标签(y是行向量)
  5. 初始化权重和偏差的方法
  6. 使用损失函数

记住这一点,让我们开始编写神经网络的类:

class NeuralNet :  """ This is a class for making Artificial Neural Networks. L2 and Droupout are the  default regularization methods implemented in this class. It takes the following parameters:  1. layers : A python list containing the different number of neurons in each layer. (containing the output layer) Eg - [64,32,16,16,1]  2. X : Matrix of features with rows as features and columns as different examples.  3. y : Numpy array containing the ouputs of coresponding examples.  4. ac_funcs : A python list containing activation function of each layer. Eg - ['relu','relu','lrelu','tanh','sigmoid']  5. init_method : Meathod to initialize weights of the network. Can be 'gaussian','random','zeros'.  6. loss_func : Currently not implemented  7. W : Weights of a pretrained neural network with same architecture.  8. W : Biases of a pretrained neural network with same architecture. """
474d275ac2706138aee1f66c685812b5.png

现在我们有了一个正确记录的神经网络类,我们可以继续初始化网络的其他变量。

 def __init__(self, layers, X, y, ac_funcs, init_method='gaussian', loss_func='b_ce', W=np.array([]), B=np.array([])) : """ Initialize the network. """ # Store the layers of the network self.layers = layers # ---- self.W = None self.B = None # Store the number of examples in the dataset as m self.m = X.shape[1] # Store the full layer list as n self.n = [X.shape[0], *layers] # Save the dataset self.X = X # Save coresponding output self.y = y # List to store the cost of the model calculated during training self.cost = [] # Stores the accuracy obtained on the test set. self.acc = 0 # Activation function of each layer self.ac_funcs = ac_funcs self.loss = loss_func # Inittialize the weights by provided methods if not provided.
83b8aa7c2fb821d2e21423219fec5790.png

我们将使用' self.m'来存储数据集中示例的数量。' self.n '将存储每层中神经元数量的信息。' self.ac_funcs '是每层的激活函数的python列表。' self.cost '将在我们训练网络时存储成本函数的记录值。' self.acc '将在训练后的数据集上存储记录的精度。在初始化网络的所有变量之后,让我们进一步初始化网络的权重和偏差。

6.初始化权重和偏差

我们知道权重不能初始化为零,因为每个神经元的假设变得相同而网络永远不会学习。因此,我们必须有一些方法来使我们的神经网络学习。我们可以使用高斯正态分布来获得随机值。由于这些分布的均值为零,因此权重集中在零并且非常小。因此,网络开始非常快速有效地学习。我们可以使用np.random.randn()函数从正态分布中生成随机值。

 # Inittialize the weights by provided methods if not provided. if len(W) and len(B) : self.W = W self.B = B else :  if init_method=='gaussian':  self.W = [np.random.randn(self.n[nl], self.n[nl-1]) for nl in range(1,len(self.n))] self.B = [np.zeros((nl,1), 'float32') for nl in self.layers] elif init_method == 'random': self.W = [np.random.rand(self.n[nl], self.n[nl-1]) for nl in range(1,len(self.n))] self.B = [np.random.rand(nl,1) for nl in self.layers] elif init_method == 'zeros': self.W = [np.zeros((self.n[nl], self.n[nl-1]), 'float32') for nl in range(1,len(self.n))] self.B = [np.zeros((nl,1), 'float32') for nl in self.layers]
af14506a066d33b2527c839378b88886.png

我们已将权重初始化为正态分布中的随机值。偏差已初始化为零。

7.正向传播

首先,让我们理解没有正则化的正向传播。

fe75af177e8f8af9f8f29006bebf1841.png

我们用Z表示每个神经元从一层到另一层的连接。一旦我们计算了Z,我们将激活函数f应用于Z值以获得每层中每个神经元的激活y。这是简单的正向传播。Dropout是一种提高神经网络泛化能力和鲁棒性的神奇技术。所以,让我们首先了解一下Dropout正则化。

Dropout正则化的本质

Dropout,顾名思义,是指神经网络中的一些神经元“失活”,并对其余的神经元进行训练。

7ca8999b023adf5431d57b96ac2273ef.png

为了提高性能,我们可以训练几十个和几百个具有不同超参数值的神经网络,获得所有网络的输出并取其平均值来获得最终结果。这个过程在计算上非常昂贵并且实际上不能实现。因此,我们需要一种以更优化和计算成本更低的方式执行类似操作的方法。Dropout正则化以非常便宜和简单的方式完成相似的事情。事实上,Dropout是优化性能的简单方法,近年来受到了广泛的关注,并且几乎在许多其他深度学习模型中无处不在。

要实现Dropout,我们将使用以下方法:

5f9544371d035fdf2460b81337a33b1b.png

我们将首先从伯努利分布中提取随机值,如果概率高于某个阈值则保持神经元不变,然后执行常规正向传播。注意,我们不会在预测新数据集上的值或测试时间期间应用dropout。

实现Dropout的代码

我们使用keep_prob作为每层神经元存活的概率。我们只保留概率高于存活概率或keep_prob的神经元。假设,它的值是0.8。这意味着我们将使每一层中20%的神经元失活,并训练其余80%的神经元。注意,我们在每次迭代后停用随机选择的神经元。这有助于神经元学习在更大的数据集上泛化的特征。

 def _feedForward(self, keep_prob): """ Forward pass """ z = [];a = [] z.append(np.dot(self.W[0], self.X) + self.B[0]) a.append(PHI[self.ac_funcs[0]](z[-1])) for l in range(1,len(self.layers)): z.append(np.dot(self.W[l], a[-1]) + self.B[l]) # a.append(PHI[self.ac_funcs[l]](z[l])) _a = PHI[self.ac_funcs[l]](z[l]) a.append( ((np.random.rand(_a.shape[0],1) < keep_prob)*_a)/keep_prob ) return z,a
3950c0ea5a2fffdff48e345ec8cd82c8.png

我们首先初始化将存储Z和A值的列表。我们首先在Z中附加第一层的线性值,然后在A中附加第一层神经元的激活。PHI是一个python字典,包含我们之前编写的激活函数。类似地使用for循环计算所有其他层的Z和A的值。注意,我们没有在输入层应用dropout。我们最终返回Z和A的计算值。

8.成本函数

我们将使用标准二进制/分类交叉熵成本函数。

 def _cost_func(self, a, _lambda): """ Binary Cross Entropy Cost Function """ return ( (-1/self.m)*np.sum(np.nan_to_num(self.y*np.log(a) + (1-self.y)*np.log(1-a))) + (_lambda/(2*self.m))*np.sum([np.sum(i**2) for i in self.W]) ) def _cost_derivative(self, a) :  """ The derivative of cost w.r.t z """ return (a-self.y) 
fd64ce1e630f8bc5abf037623cef52fa.png

我们用L2正则化对我们的成本函数进行了编译。lambda参数称为“ 惩罚参数 ”。它有助于使权重值不会迅速增加,从而更好地形成。这里,' a'包含输出层的激活值。我们还有函数_cost_derivative来计算成本函数对输出层激活的导数。我们稍后会在反向传播期间使用它。

9.反向传播

以下是我们需要执行反向传播的一些公式。

4924296f649b1a8041b7ea90d0f541c3.png

我们将在深度神经网络上实现这一点。右边的公式是完全向量化的。一旦理解了这些公式,我们就可以继续对它们进行编译。

 def startTraining(self, epochs, alpha, _lambda, keep_prob=0.5, interval=100): """ Start training the neural network. It takes the followng parameters :   1. epochs : Number of epochs for which you want to train the network.  2. alpha : The learning rate of your network.  3. _lambda : L2 regularization parameter or the penalization parameter.  4. keep_prob : Dropout regularization parameter. The probability of neurons to deactivate. Eg - 0.8 means 20% of the neurons have been deactivated.  5. interval : The interval between updates of cost and accuracy. """ start = time.time() for i in range(epochs+1) :  z,a = self._feedForward(keep_prob) delta = self._cost_derivative(a[-1]) for l in range(1,len(z)) :  delta_w = np.dot(delta, a[-l-1].T) + (_lambda)*self.W[-l] delta_b = np.sum(delta, axis=1, keepdims=True) delta = np.dot(self.W[-l].T, delta)*PHI_PRIME[self.ac_funcs[-l-1]](z[-l-1]) self.W[-l] = self.W[-l] - (alpha/self.m)*delta_w self.B[-l] = self.B[-l] - (alpha/self.m)*delta_b delta_w = np.dot(delta, self.X.T ) + (_lambda)*self.W[0] delta_b = np.sum(delta, axis=1, keepdims=True) self.W[0] = self.W[0] - (alpha/self.m)*delta_w self.B[0] = self.B[0] - (alpha/self.m)*delta_b
96f5c8720a966dd1476ab528723c3d05.png

我们将epochs、alpha(学习率)、_lambda、keep_prob和interval作为函数的参数来实现反向传播。

我们从正向传播开始。然后我们将成本函数的导数计算为delta。现在,对于每一层,我们计算delta_w和delta_b,其中包含成本函数对网络的权重和偏差的导数。然后我们根据各自的公式更新delta,权重和偏差。在将最后一层的权重和偏差更新到第二层之后,我们更新第一层的权重和偏差。我们这样做了几次迭代,直到权重和偏差的值收敛。

重要提示:此处可能出现的一个重大错误是在更新权重和偏差后更新delta 。这样做可能会导致非常糟糕的梯度渐变消失/爆炸问题。

我们的大部分工作都在这里完成,但是我们仍然需要编译可以预测新数据集结果的函数。因此,作为我们的最后一步,我们将编写一个函数来预测新数据集的标签。

10.预测新数据集的标签

这一步非常简单。我们只需要执行正向传播但不需要Dropout正则化。我们不需要在测试时应用Dropout正则化,因为我们需要所有层的所有神经元来为我们提供适当的结果,而不仅仅是一些随机值。

 def predict(self, X_test) : """ Predict the labels for a new dataset. Returns probability. """ a = PHI[self.ac_funcs[0]](np.dot(self.W[0], X_test) + self.B[0]) for l in range(1,len(self.layers)): a = PHI[self.ac_funcs[l]](np.dot(self.W[l], a) + self.B[l]) return a
7cc4d6a0c38804cb026013fab2079c6e.png

我们将返回输出层的激活作为结果。

整个代码

以下是您自己实现人工神经网络的完整代码。我在培训时添加了一些代码来打印网络的成本和准确性。除此之外,一切都是一样的。

# Importing the librariesimport numpy as npimport matplotlib.pyplot as pltimport pandas as pdimport warningsimport timewarnings.filterwarnings('ignore');import osimport sys# Importing our datasetos.chdir("C:/Users/Hilak/Desktop/INTERESTS/Machine Learning A-Z Template Folder/Part 3 - Classification/Section 14 - Logistic Regression");training_set = pd.read_csv("Social_Network_Ads.csv");# Splitting our dataset into matrix of features and output values.X = training_set.iloc[:, 1:4].valuesy = training_set.iloc[:, 4].values# Encoding our object features.from sklearn.preprocessing import LabelEncoder, OneHotEncoderle_x = LabelEncoder()X[:,0] = le_x.fit_transform(X[:,0])ohe = OneHotEncoder(categorical_features = [0])X = ohe.fit_transform(X).toarray()# Performing Feature scalingfrom sklearn.preprocessing import StandardScalerss = StandardScaler()X[:,2:4] = ss.fit_transform(X[:, 2:4])# Splitting the dataset into train and test set.from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)X_train = X_train.TX_test = X_test.T# # Alternate Dataset for test purposes. Not used in the example shown# os.chdir("C:甥敳獲HilakDesktopINTERESTSMachine Learning A-Z Template FolderPart 8 - Deep LearningSection 39 - Artificial Neural Networks (ANN)");# dataset = pd.read_csv('Churn_Modelling.csv')# X = dataset.iloc[:, 3:13].values# y = dataset.iloc[:, 13].values# # Encoding categorical data# from sklearn.preprocessing import LabelEncoder, OneHotEncoder# labelencoder_X_1 = LabelEncoder()# X[:, 1] = labelencoder_X_1.fit_transform(X[:, 1])# labelencoder_X_2 = LabelEncoder()# X[:, 2] = labelencoder_X_2.fit_transform(X[:, 2])# onehotencoder = OneHotEncoder(categorical_features = [1])# X = onehotencoder.fit_transform(X).toarray()# X = X[:, 1:]# # Splitting the dataset into the Training set and Test set# from sklearn.model_selection import train_test_split# X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)# X_test, X_CV, y_test, y_CV = train_test_split(X, y, test_size = 0.5)# # Feature Scaling# from sklearn.preprocessing import StandardScaler# sc = StandardScaler()# X_train = sc.fit_transform(X_train)# X_test = sc.transform(X_test)# X_train = X_train.T# X_test = X_test.T# X_CV = X_CV.Tdef sigmoid(z) : """ Reutrns the element wise sigmoid function. """ return 1./(1 + np.exp(-z))def sigmoid_prime(z) : """ Returns the derivative of the sigmoid function. """ return sigmoid(z)*(1-sigmoid(z))def ReLU(z) :  """ Reutrns the element wise ReLU function. """ return (z*(z > 0))def ReLU_prime(z) : """ Returns the derivative of the ReLU function. """ return 1*(z>=0)def lReLU(z) :  """ Reutrns the element wise leaky ReLU function. """ return np.maximum(z/100,z)def lReLU_prime(z) : """ Returns the derivative of the leaky ReLU function. """ z = 1*(z>=0) z[z==0] = 1/100 return zdef tanh(z) : """ Reutrns the element wise hyperbolic tangent function. """ return np.tanh(z)def tanh_prime(z) :  """ Returns the derivative of the tanh function. """ return (1-tanh(z)**2)# A dictionary of our activation functionsPHI = {'sigmoid':sigmoid, 'relu':ReLU, 'lrelu':lReLU, 'tanh':tanh}# A dictionary containing the derivatives of our activation functionsPHI_PRIME = {'sigmoid':sigmoid_prime, 'relu':ReLU_prime, 'lrelu':lReLU_prime, 'tanh':tanh_prime}class NeuralNet :  """ This is a class for making Artificial Neural Networks. L2 and Droupout are the  default regularization methods implemented in this class. It takes the following parameters:  1. layers : A python list containing the different number of neurons in each layer. (containing the output layer) Eg - [64,32,16,16,1]  2. X : Matrix of features with rows as features and columns as different examples.  3. y : Numpy array containing the ouputs of coresponding examples.  4. ac_funcs : A python list containing activation function of each layer. Eg - ['relu','relu','lrelu','tanh','sigmoid']  5. init_method : Meathod to initialize weights of the network. Can be 'gaussian','random','zeros'.  6. loss_func : Currently not implemented  7. W : Weights of a pretrained neural network with same architecture.  8. W : Biases of a pretrained neural network with same architecture. """ def __init__(self, layers, X, y, ac_funcs, init_method='gaussian', loss_func='b_ce', W=np.array([]), B=np.array([])) : """ Initialize the network. """ # Store the layers of the network self.layers = layers # ---- self.W = None self.B = None # Store the number of examples in the dataset as m self.m = X.shape[1] # Store the full layer list as n self.n = [X.shape[0], *layers] # Save the dataset self.X = X # Save coresponding output self.y = y # List to store the cost of the model calculated during training self.cost = [] # Stores the accuracy obtained on the test set. self.acc = 0 # Activation function of each layer self.ac_funcs = ac_funcs self.loss = loss_func # Inittialize the weights by provided methods if not provided. if len(W) and len(B) : self.W = W self.B = B else :  if init_method=='gaussian':  self.W = [np.random.randn(self.n[nl], self.n[nl-1]) for nl in range(1,len(self.n))] self.B = [np.zeros((nl,1), 'float32') for nl in self.layers] elif init_method == 'random': self.W = [np.random.rand(self.n[nl], self.n[nl-1]) for nl in range(1,len(self.n))] self.B = [np.random.rand(nl,1) for nl in self.layers] elif init_method == 'zeros': self.W = [np.zeros((self.n[nl], self.n[nl-1]), 'float32') for nl in range(1,len(self.n))] self.B = [np.zeros((nl,1), 'float32') for nl in self.layers]  def startTraining(self, epochs, alpha, _lambda, keep_prob=0.5, interval=100): """ Start training the neural network. It takes the followng parameters :   1. epochs : Number of epochs for which you want to train the network.  2. alpha : The learning rate of your network.  3. _lambda : L2 regularization parameter or the penalization parameter.  4. keep_prob : Dropout regularization parameter. The probability of neurons to deactivate. Eg - 0.8 means 20% of the neurons have been deactivated.  5. interval : The interval between updates of cost and accuracy. """ start = time.time() for i in range(epochs+1) :  z,a = self._feedForward(keep_prob) delta = self._cost_derivative(a[-1]) for l in range(1,len(z)) :  delta_w = np.dot(delta, a[-l-1].T) + (_lambda)*self.W[-l] delta_b = np.sum(delta, axis=1, keepdims=True) delta = np.dot(self.W[-l].T, delta)*PHI_PRIME[self.ac_funcs[-l-1]](z[-l-1]) self.W[-l] = self.W[-l] - (alpha/self.m)*delta_w self.B[-l] = self.B[-l] - (alpha/self.m)*delta_b delta_w = np.dot(delta, self.X.T ) + (_lambda)*self.W[0] delta_b = np.sum(delta, axis=1, keepdims=True) self.W[0] = self.W[0] - (alpha/self.m)*delta_w self.B[0] = self.B[0] - (alpha/self.m)*delta_b if not i%interval : aa = self.predict(self.X) if self.loss == 'b_ce': aa = aa > 0.5 self.acc = sum(sum(aa == self.y)) / self.m cost_val = self._cost_func(a[-1], _lambda) self.cost.append(cost_val) elif self.loss == 'c_ce': aa = np.argmax(aa, axis = 0) yy = np.argmax(self.y, axis = 0) self.acc = np.sum(aa==yy)/(self.m) cost_val = self._cost_func(a[-1], _lambda) self.cost.append(cost_val) sys.stdout.write(f'Epoch[{i}] : Cost = {cost_val:.2f} ; Acc = {(self.acc*100):.2f}% ; Time Taken = {(time.time()-start):.2f}s') print('') return None  def predict(self, X_test) : """ Predict the labels for a new dataset. Returns probability. """ a = PHI[self.ac_funcs[0]](np.dot(self.W[0], X_test) + self.B[0]) for l in range(1,len(self.layers)): a = PHI[self.ac_funcs[l]](np.dot(self.W[l], a) + self.B[l]) return a   def _feedForward(self, keep_prob): """ Forward pass """ z = [];a = [] z.append(np.dot(self.W[0], self.X) + self.B[0]) a.append(PHI[self.ac_funcs[0]](z[-1])) for l in range(1,len(self.layers)): z.append(np.dot(self.W[l], a[-1]) + self.B[l]) # a.append(PHI[self.ac_funcs[l]](z[l])) _a = PHI[self.ac_funcs[l]](z[l]) a.append( ((np.random.rand(_a.shape[0],1) < keep_prob)*_a)/keep_prob ) return z,a  def _cost_func(self, a, _lambda): """ Binary Cross Entropy Cost Function """ return ( (-1/self.m)*np.sum(np.nan_to_num(self.y*np.log(a) + (1-self.y)*np.log(1-a))) + (_lambda/(2*self.m))*np.sum([np.sum(i**2) for i in self.W]) ) def _cost_derivative(self, a) :  """ The derivative of cost w.r.t z """ return (a-self.y)  @property def summary(self) : return self.cost, self.acc, self.W,self.B def __repr__(self) :  return f''# Initializing our neural networkneural_net_sigmoid = NeuralNet([32,16,1], X_train, y_train, ac_funcs = ['relu','relu','sigmoid'])# Staring the training of our network.neural_net_sigmoid.startTraining(5000, 0.01, 0.2, 0.5, 100)# Predicting on new dataset using our trained network.preds = neural_net_sigmoid.predict(X_test)preds = preds > 0.5acc = (sum(sum(preds == y_test)) / y_test.size)*100# Accuracy (metric of evaluation) obtained by the network.print(f'Test set Accuracy ( r-t-s ) : {acc}%')# Plotting our cost vs epochs relationshipsigmoid_summary = neural_net_sigmoid.summaryplt.plot(range(len(sigmoid_summary[0])), sigmoid_summary[0], label='Sigmoid Cost')plt.title('Cost')plt.show()# Comparing our results with the library keras.from keras.models import Sequentialfrom keras.layers import DenseX_train, X_test = X_train.T, X_test.Tclassifier = Sequential()classifier.add(Dense(input_dim=4, units = 32, kernel_initializer="uniform

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431602.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[leedcode 52] N-Queens II

Follow up for N-Queens problem. Now, instead outputting board configurations, return the total number of distinct solutions. public class Solution {//本题类似于N-Queens&#xff0c;这个更简单一些&#xff0c;只需要求出解法的个数即可&#xff0c;因此没有了prin…

uinty粒子系统子物体变大_Unity2018粒子系统全息讲解,坑深慎入(3)

马上注册&#xff0c;加入CGJOY&#xff0c;让你轻松玩转CGJOY。您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册x200357v0p9jufzelwj0uuj.jpg (60.94 KB, 下载次数: 16)2018-6-11 20:22 上传声明&#xff01;声明&#xff01;声明&#xff01;这不会让…

第16/24周 SQL Server 2014中的基数计算

大家好&#xff0c;欢迎回到性能调优培训。上个星期我们讨论在SQL Server里基数计算过程里的一些问题。今天我们继续详细谈下&#xff0c;SQL Server 2014里引入的新基数计算。 新基数计算 SQL Server 2014里一个增强是新的基数计算。上个星期你已经学到老基数计算有些限制&…

mysql主从复制不同步案例_Mysql主从不同步问题处理案例

在使用Mysql的主从复制架构中&#xff0c;有两个比较头疼的问题&#xff1a;1、主从数据不同步后如何处理2、主从同步延迟问题如何解决本文将根据实际案例来分析下问题1&#xff0c;至于问题2多数文档介绍的办法是启用多线程复制来解决&#xff0c;言归正传&#xff0c;这里的问…

python3.6生成exe_Python 3.6打包成EXE可执行程序的实现

1、下载pyinstaller python 3.6 已经自己安装了pip&#xff0c;所以只需要执行 pip install pyinstaller就可以了2、打包程序 进入到你你需要打包的目录&#xff1b;比如我在H:\xcyk开始打包&#xff0c;执行pyinstaller xxx.py我们发现&#xff0c;竟然报错&#xff01;&#…

opencvpython教程百度云资源_Python+OpenCV图像处理入门,视频教程下载

课程介绍&#xff1a; 李老师讲课生动、深入浅出&#xff0c;出版OpenCV编程案例详解、Python-OpenCV图穷录、MATLAB图像处理、MATLAB图像案例教程等在线课程。 本课程系统概括了Python-OpenCV的使用方法&#xff0c;让学习者快速入门。根据本课程规划的图书《Python-OpenCV图穷…

将结构体写入文件_将COCO检测结果写入json文件

最近很多朋友留言问我如何将检测结果写入json文件并且用于COCO API的评估&#xff0c;之前对于检测结果的格式已经做了简单的说明&#xff0c;这里提供一些简单的函数&#xff0c;直接调用将结果写入即可。用于COCO API测试的文件格式HUST小菜鸡&#xff1a;用于COCO API测试的…

js for循环_JS 函数的执行时机(深入理解6个6)

定时器&#xff1a;setTimeout()setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式提示&#xff1a; 1000 毫秒 1 秒。 提示&#xff1a; 如果你只想重复执行可以使用 setInterval() 方法。 提示&#xff1a; 使用 clearTimeout() 方法来阻止函数的执行。语法&#x…

OCLint+Xcode 代码规范利器

很多公司里面都会强调代码规范的问题&#xff0c;开发者也都知道代码规范的好处。可实际开发中往往因为各种原因使我们把它的优先级不知不觉中降低了。  这里向一个有代码追求和洁癖的程序猿推荐一个分析工具&#xff0c;它可以成为你重构代码或着review的基本规则 OCLint是一…

MySQL求类型为GX的平均积分_mysql基本操作

一、连接操作格式&#xff1a;mysql-h主机地址 -u用户名 -p用户密码例&#xff1a;连接到远程主机上的mysql假设远程主机的IP为&#xff1a;110.110.110.110用户名为root,密码为abcd123则键入以下命令&#xff1a;mysql-h110.110.110.110-uroot-pabcd123二、用户级操作1、selec…

k均值聚类算法优缺点_Grasshopper实现K均值聚类算法

本文很长很长&#xff0c;有很多很多图&#xff0c;包含以下部分&#xff1a;1.算法简介2.如何分类平面点3.如何分类空间点4.如何分类多维数据5.后记提醒&#xff1a;以下内容包括&#xff1a;智障操作&#xff0c;无中生友&#xff0c;重复造轮子 等1.算法简介k均值聚类算法&a…

fullgc频繁的原因_系统运行缓慢,CPU 100%,Full GC次数过多,这一招帮你全搞定

处理过线上问题的同学基本上都会遇到系统突然运行缓慢&#xff0c;CPU 100%&#xff0c;以及Full GC次数过多的问题。当然&#xff0c;这些问题的最终导致的直观现象就是系统运行缓慢&#xff0c;并且有大量的报警。本文主要针对系统运行缓慢这一问题&#xff0c;提供该问题的排…

WEKA “Detailed Accuracy By Class”和“Confusion Matrix”含义

原文 Summary &#xff08;总结&#xff09;Correctly Classified Instances&#xff08;正确分类的实例&#xff09; 45 90 %Incorrectly Classified Instances &#xff08;错误分类的实例&#xff09; 5 10 %Kappa …

es删除数据_面试官是怎么来考察你对ES搜索引擎的理解?

来源:http://1t.click/ZdY一. 面试官心理分析问这个&#xff0c;其实面试官就是要看看你了解不了解 es 的一些基本原理&#xff0c;因为用 es 无非就是写入数据&#xff0c;搜索数据。你要是不明白你发起一个写入和搜索请求的时候&#xff0c;es 在干什么&#xff0c;那你真的是…

一个分布式服务器集群架构方案

0x01.大型网站演化 简单说&#xff0c;分布式是以缩短单个任务的执行时间来提升效率的&#xff0c;而集群则是通过提高单位时间内执行的任务数来提升效率。 集群主要分为&#xff1a;高可用集群(High Availability Cluster)&#xff0c;负载均衡集群(Load Balance Cluster&…

python数据预处理_Python数据预处理——缺失值、重复值

一、缺失值处理 isnull( ) 、fillna( ) 、dropna( )&#xff08;1&#xff09;查看缺失查看数据集缺失&#xff0c;返回每列的缺失个数 df.isnull().sum() 查看某字段有缺失的行 df[df.a.isnull()] 查看某字段每行的缺失情况&#xff1a;返回T/F&#xff1a;df.score.isnull() …

vb如何测试连接mysql_VB怎么连接访问Access数据库?

VB是我们常常会见到的一款可视化程序设计语言&#xff0c;它的功能十分强大&#xff0c;因此有很多人会使用它&#xff0c;但是有时候我们需要用到VB来连接Access数据库&#xff0c;但是却无从下手&#xff0c;那么VB怎么连接访问Access数据库呢&#xff1f;不懂的朋友请看以下…

textarea如何在文字后面_FLASH如何制作风吹文字的效果

使用动作补间动画可以制作各种各样的动态效果&#xff0c;树叶飘落、蝴蝶飞舞等。这里再使用引导层动画结合动作补间动画制作风吹文字飞起的效果。主要知识点&#xff1a;引导层动画、动作补间动画FLASH如何制作树叶飘落​jingyan.baidu.comFlash如何制作飞舞的蝴蝶​jingyan.b…

ef mysql 外键 一对一_EFCore-一对一配置外键小记2

前后两次遇到这样的错误&#xff1a;The property xx on entity type xxxx has a temporary value. Either set a permanent value explicitly or ensure that the database is configured to generate values for this property.多数情况下是表配置关系会出现这样的问题。我实…

矩阵快速幂 HDU3483

1 #include <iostream>2 #include <cstring>3 4 using namespace std;5 6 //矩阵大小上限7 const int SIZ100;8 int MOD;9 10 //矩阵大小为n*m&#xff0c;初始化全部为011 struct mat12 {13 int n,m;14 long long ar[SIZ][SIZ];15 mat()16 {17 …