#模型 class Wine_net(nn.Module): def __init__(self): super(Wine_net, self).__init__() self.ln1=nn.LayerNorm(11) self.fc1=nn.Linear(11,22) self.fc2=nn.Linear(22,44) self.fc3=nn.Linear(44,1) def forward(self,x): x=self.ln1(x) x=self.fc1(x) x=nn.functional.relu(x) x=self.fc2(x) x=nn.functional.relu(x) x = self.fc3(x) x = nn.functional.softmax(x,dim=1) return x # 读取数据 df = pd.read_csv('winequality.csv') df1=df.drop('quality',axis=1) df2=df['quality'] train_x=torch.tensor(df1.values, dtype=torch.float32) train_y=torch.tensor(df2.values,dtype=torch.float32) train_y = train_y.unsqueeze(1) # 定义模型、损失函数和优化器 model=Wine_net() loss_fn=nn.MSELoss() optimizer =torch.optim.SGD(model.parameters(), lr=0.1) # 训练模型 for epoch in range(10): # 前向传播 print(epoch) y_pred = model(train_x) print(y_pred) print(epoch,'预测') # 计算损失 loss = loss_fn(y_pred, train_y) # 反向传播 optimizer.zero_grad() loss.backward() optimizer.step() print(loss)
时间: 2024-01-22 18:02:47 浏览: 68
这段代码实现了一个简单的神经网络模型(Wine_net),使用了MSE损失函数和SGD优化器来训练模型,训练数据是来自winequality.csv文件中的数据。
在模型定义中,Wine_net继承了nn.Module类,并在构造函数中定义了网络结构,包括三个全连接层(fc1、fc2、fc3)和一个LayerNorm层(ln1)。在forward方法中,将输入数据x传入网络中,并经过一系列的线性变换和激活函数后得到输出结果。
在训练模型时,使用一个循环来迭代训练模型10次。在每次迭代过程中,都会输出当前的损失函数值。为了进行反向传播和更新模型参数,需要调用optimizer.zero_grad()方法清空之前的梯度信息,调用loss.backward()方法计算当前的梯度信息,调用optimizer.step()方法更新模型参数。
阅读全文