コード例 #1
0
ファイル: main.py プロジェクト: mhh0318/EE7207
def SOM_RBF():
    train = True
    device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')
    data_train = scio.loadmat('data_train.mat')
    data_test = scio.loadmat('data_test.mat')
    data_label = scio.loadmat('label_train.mat')
    X = torch.tensor(data_train['data_train']).to(device)
    train_label = torch.tensor(data_label['label_train']).to(device)
    test_data = torch.tensor((data_test['data_test'])).to(device)
    print('Building SOM model...')
    model = SOM(input_size=33, hidden_size=16, sigma=np.sqrt(81))
    model = model.to(device)
    if train == True:
        losses = list()
        for epoch in range(1000):
            running_loss = 0

            loss = model.self_organizing(X, epoch)  # so phase
            running_loss += loss

            losses.append(running_loss)
            print('epoch = %d, loss = %.2f' % (epoch + 1, running_loss))
        for epoch in range(30000):
            running_loss = 0

            loss = model.convergence(X)  # conv phase
            running_loss += loss

            losses.append(running_loss)
            print('epoch = %d, loss = %.2f' % (epoch + 1, running_loss))
        train = False
    feedback = model.plot_point_map(X, train_label, ['Class 0', 'Class 1'])
    a, b, c = feedback
    tb = (a - b) / a
    tc = (a - c) / a
    accuracy0 = np.maximum(tb, tc).mean()
    center_vectors = model.weight.T
    print('Building RBF model...')
    RBF_model = RBF(33, center_vectors, 1)
    RBF_model = RBF_model.to(device)
    weight = RBF_model.train(X, train_label)
    predictions = RBF_model.test(X).unsqueeze(1)
    accuracy1 = (predictions == train_label.cpu()).sum() / torch.tensor(
        X.size(0)).float()
    predictions_y = RBF_model.test(test_data)
    print(accuracy1)
    return accuracy0, accuracy1, predictions_y