|
前言本文主要讲神经网络的上半部分。这篇文章开始有很多公式了,这些公式都很简单,但是如果是不经常在脑海里思考公式的人,那可能需要多花点时间做一下自我训练,个人感觉,也就几天时间,就能把自己感觉给调整出来。习惯了公式看下面内容就会轻松很多,另外如果要深入学习人工智能,熟练的认知公式也是个必须的事情。另外,我发现我前面文章写的有歧义的地方还是挺多,虽然,已经改了一部分,但,可能还有没发现的,大家看的时候尽量多理解着看吧。本着目的是学会使用神经网络的开发,至于数学的部分,就能过就过吧。神经网络先学个例子先结合以前的知识理解一个例子,理解了这个例子,后面理解神经网络就容易多了。classNeuralNet1(nn.Module):def__init__(self,input_size,hidden_size):super(NeuralNet1,self).__init__()self,linear1=nn.Linear(input_size,hidden_size)#x的列转成隐藏层的列self.relu=nn.ReLU()#使用了ReLU(RectifiedLinearUnit)作为激活函数self.linear2=nn.Linear(hidden_size,1)#隐藏层的列转成1列defforward(self,x)ut=self.linear1(x)out=self.relu(out)out=self.linear2(out)#sigmoidattheendy_pred=torch.sigmoid(out)returny_predmodel=NeuralNet1(input_size=28*28,hidden_size=5)criterion=nn.BCELoss()结合我们之前的知识,上面代码就是定义了一个类,该类继承了Module。然后初始化函数接受了两参数,俩参数分别是x列,和隐藏层列,然后定义三个对象linear1,linear2,relu。然后forward就是执行,中间的转换逻辑是x列转成hidden列,hidden列转1列,这中间再加一个激活函数,我们先不管激活函数是什么,反正,代码结构,大概就是这样的逻辑。criterion=nn.BCELosS()是定义损失函数,BCELoss的全称是BinaryCrossEntropyLoss(二元交叉熵损失)。ps:大家有没有注意到,自从我们开始使用model后,就再也没使用requires_grad来开启张量计算了,这是因为model在计算的时候自己就开了【torch.tensor(0.0,requires_grad=True)】激活函数激活函数其实也是函数,就是把x进行一下数据转换。我们上篇文章已经使用过了Sigmoid把数据转换成百分比了。下面看一下最受欢迎的激活函数都有什么,如下:
|
|