全连接神经网络(Fully Connected Neural Network,FCNN)是由一系列全连接层组成的深度神经网络,是深度学习中的基本架构。全连接层的特点是相邻两层的任意两个神经元之间均有连接。
接下来,我们将用一个简单的二分类的全连接神经网络结构对数据集进行训练。
基本步骤:
1.读取数据集,并将数据表示为张量;
2.定义神经网络层
3.对网络进行训练
4.损失函数(多分类任务:nn.CrossEntropyLoss()交叉熵函数)
详细内容可关注其他笔记,这里不再过多赘述)
5.显示损失函数值变化趋势
import torch
import torch.nn as nn
import matplotlib.pyplot as plt
torch.manual_seed(123)
#1.读取数据集,并将数据表示为张量;
path = r'.\\data'
fg = open(path+'\\'+"xxxx","r",encoding='utf-8')
s = list(fg)
X1,X2,X3,Y = [],[],[],[]
for i,v in enumerate(s):
v = v.replace('\n','')
v = v.split(',')
X1.append(float(v[0]))
X2.append(float(v[1]))
X3.append(float(v[2]))
Y.append(int(v[3]))
fg.close()
X1,X2,X3,Y = torch.Tensor(X1),torch.Tensor(X2),torch.Tensor(X3),torch.LongTensor(Y)
X=torch.stack((X1,X2,X3),dim=1)
del X1,X2,X3
index = torch.randperm(len(Y))
X,Y = X[index],Y[index]
#2.定义神经网络层
class Model(nn.Module):
def__int__(self):
super(Model,self).__int__()
self.fc1=nn.Linear(3,4)#3个输入特征,4个神经元
self.fc2=nn.Linear(4,2)#承接上一个网络层的4个神经元,输出2个神经元(2个类别)
def forward(self,x):
out = self.fc1(x)
out = torch.tanh(out)#使用激活函数tanh
out = self.fc2(out)
return out
#3.对网络进行训练
model=Model()
optimizer = torch.optim.Adam(model.parameters(),lr=0.01)
LS=[]
for epoch in range(5):
i = 0
for x,y in zip(X,Y):
nn.CrossEntropyLoss()
x = x.unsqueeze(0)
pre_y = model(x)
y = torch.LongTensor([y])
#4.损失函数(多分类任务:nn.CrossEntropyLoss()交叉熵函数)
loss = nn.CrossEntropyLoss()(prey_y,y)
if i %50 == 0
L.append(Loss.item())
i+=1
optimizer.zero_grad()
loss.backward()
optimizer.step()
#5.显示损失函数值变化趋势
plt.plot(LS)
plt.tick_params(labelsize=13)
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
plt.grid()
plt.xlabel("损失函数采样次序",fontsize=13)
plt.ylabel("交叉熵损失函数值",fontsize=13)
plt.show()
以上,本文内容参考自蒙祖强,欧元汉编著的《深度学习理论与应用》。