019/Pytorch_2
/3.2.2.3_正则化.py
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.autograd import Variable
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_auc_score
def load_data():
num_inputs = 200
num_out = 1
# 生成样本数据
x = np.random.uniform(-1, 1, size=(num_inputs, 1))
y = x + 0.3 * np.random.normal(size=(num_inputs, 1))
y = (y - y.min()) / (y.max() - y.min()) # 归一化
x = x.astype(np.float32)
y = y.astype(np.float32)
# 加入噪声
x_noisy = x + 0.5 * np.random.normal(size=x.shape)
y_noisy = y + 0.3 * np.random.normal(size=y.shape)
# 对数据进行切分
split_point = 100
x_train = x[:split_point, :]
x_test = x[split_point:, :]
y_train = y[:split_point, :]
y_test = y[split_point:, :]
x_noisy_train = x_noisy[:split_point, :]
x_noisy_test = x_noisy[split_point:, :]
y_noisy_train = y_noisy[:split_point, :]
y_noisy_test = y_noisy[split_point:, :]
# 归一化
mean_x = x_train.mean(axis=0)
std_x = x_train.std(axis=0)
x_train = (x_train - mean_x) / std_x
x_test = (x_test - mean_x) / std_x
mean_y = y_train.mean(axis=0)
std_y = y_train.std(axis=0)
y_train = (y_train - mean_y) / std_y
y_test = (y_test - mean_y) / std_y
# 对输入和标签进行转置
x_train = x_train.T
x_test = x_test.T
y_train = y_train.T
y_test = y_test.T
x_noisy_train = x_noisy_train.T
x_noisy_test = x_noisy_test.T
y_noisy_train = y_noisy_train.T
y_noisy_test = y_noisy_test.T
return x_train, x_test, y_train, y_test, x_noisy_train, x_noisy_test, y_noisy_train, y_noisy_test, num_inputs, num_out
def create_model(num_inputs, num_out):
model = nn.Sequential(
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),
nn.ReLU(),
nn.Linear(num_inputs, num_inputs),