Ejemplo n.º 1
0
        self.add(Flatten())  # (64,16,8,8) -> (64,16*8*8=1024)
        self.add(Linear(in_features=1024, out_features=256))  #
        self.add(BatchNorm2d(256))
        self.add(Activation(afn))
        self.add(Linear(in_features=256, out_features=10))
        self.add(BatchNorm2d(256))
        self.add(Activation('softmax'))


if __name__ == "__main__":

    id = 'lenet5'

    if id == 'lenet5':

        dataset = DigitsDataset(norm=True, one_hot=True)
        datas = dataset.datas
        labels = dataset.labels
        # 分隔数据集
        train_x, test_x, train_y, test_y = train_test_split(dataset.datas,
                                                            dataset.labels,
                                                            test_size=0.3,
                                                            shuffle=True)
        #        test_x, val_x, test_y, val_y = train_test_split(test_x,
        #                                                        test_y,
        #                                                        test_size=0.3,
        #                                                        shuffle=True)
        train_x = train_x.reshape(-1, 1, 8, 8)
        test_x = test_x.reshape(-1, 1, 8, 8)
        #        val_x = val_x.reshape(-1, 1, 8, 8)
import matplotlib.pyplot as plt
import numpy as np
from dataset.digits_dataset import DigitsDataset
from dataset.multi_class_dataset import MultiClassDataset
from dataset.nonlinear_dataset import NonlinearDataset
from sklearn.model_selection import train_test_split
from core.knn_lib import KNN
from core.kd_tree_lib import KdTree

if __name__ == "__main__":

    source = 'multi'

    if source == 'digits':
        # get dataset
        dataset = DigitsDataset(data_type='train')
        # get model
        knn = KNN(dataset.datas, dataset.labels, k=5)
        # get sample
        sample_id = 1507
        sample, label = dataset[sample_id]  # 用第2000个样本做测试
        # test and show
        pred = knn.predict_single(sample)
        print("the sample label is %d, predict is %d" % (label, pred))
        plt.figure()
        plt.subplot(1, 1, 1)
        plt.imshow(sample.reshape(8, 8), cmap='gray')

        train_x, test_x, train_y, test_y = train_test_split(dataset.datas,
                                                            dataset.labels,
                                                            test_size=0.3)
Ejemplo n.º 3
0
        # get model
        logi = LogisticReg(train_feats,
                           train_labels,
                           lr=0.0001,
                           n_epoch=100,
                           batch_size=32)
        logi.train()

        logi.evaluation(train_feats, train_labels)
        # evaluation
        logi.evaluation(test_feats, test_labels)

    if dataset == 'digits':
        # 注意,对于图片等数据,至少需要norm之后再训练,否则loss会爆炸
        dataset = DigitsDataset(binary=True, norm=True)
        train_feats, test_feats, train_labels, test_labels = train_test_split(
            dataset.datas, dataset.labels, test_size=0.3)

        # get model
        logi = LogisticReg(train_feats,
                           train_labels,
                           lr=0.001,
                           n_epoch=500,
                           batch_size=-1)
        logi.train()

        # evaluation
        acc = logi.evaluation(test_feats, test_labels)

    if dataset == 'breastcancer':
        perc.vis_boundary()

    if dataset == 'mnist':  # 必须特征归一化,同时w必须初始化为0,否则会导致inf问题
        # acc = [email protected]/batch8/w0/norm
        dataset = MnistDataset(data_type='train', binary=True)  # 采用mnist数据集
        train_feats, test_feats, train_labels, test_labels = train_test_split(
            dataset.datas, dataset.labels, test_size=0.3)

        # get model
        soft = Perceptron(train_feats, train_labels)
        soft.train(lr=0.00001, n_epoch=10, batch_size=8)

        # evaluation
        acc = soft.evaluation(test_feats, test_labels)
        print('acc = %f' % acc)

    if dataset == 'digits':
        # acc = [email protected]/batch64/w0/norm
        dataset = DigitsDataset(data_type='binary')
        train_feats, test_feats, train_labels, test_labels = train_test_split(
            dataset.datas, dataset.labels, test_size=0.3)

        # get model
        soft = Perceptron(train_feats, train_labels)
        soft.train(lr=0.0001, n_epoch=1000, batch_size=64)

        # evaluation
        acc = soft.evaluation(test_feats, test_labels)
        print('acc = %f' % acc)