多维特征的输入(示例:疾病风险预测)
-
其实前面已经提到了,线性模型中的输入输出数据集可以不在是一个具体的数,而是可以是多维的矩阵
-
采用矩阵加广播机制,可以不再使用for循环来训练,减轻代码量
-
而此时可以回答复杂神经网络的问题,它中间有很多层,每层都是一次线性回归,但是层与层之间要加上激活函数
-
当然你也可以手动的增加层数,比如你的输入集是8维的,输出集是一维的,直接使用(8 * 1)的权重当然可以,但是这样泛化能力不强。所以可以在中间加上几层神经网络,比如8–10–6–4—2–1,不但可以降维,甚至可以升维。

示例代码
主要训练代码和逻辑斯蒂回归一致,主要变化在于数据集的准备和构造模型上
data = np.loadtxt('DataSet/diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(data[:, :-1]) # 所有行,除了最后一列
y_data = torch.from_numpy(data[:, [-1]]) # 所有行,最后一列,加[]的原因是防止numpy自动把矩阵降级成向量
class MDIModel(nn.Module):
def __init__(self):
super(MDIModel, self).__init__()
self.linear1 = nn.Linear(8, 6)
self.linear2 = nn.Linear(6, 4)
self.linear3 = nn.Linear(4, 1)
self.sigmoid = nn.Sigmoid()
self.relu = nn.ReLU()
def forward(self, x):
# 注意:连续使用 Sigmoid 可能会导致梯度消失,一般最后一层才用逻辑斯蒂
# 现代网络中内部层通常使用 ReLU
x = self.relu(self.linear1(x))
x = self.relu(self.linear2(x))
x = self.sigmoid(self.linear3(x))
return x

422

被折叠的 条评论
为什么被折叠?



