Example #1
0
    def is_valid(self, url, target):
        img = self.get_img(url)
        img = self.deal_with_img(img)
        model = AlexNet()
        model = torch.nn.DataParallel(model)

        optimizer = optim.SGD(model.parameters(), lr=LR)
        scheduler = StepLR(optimizer, step_size=20, gamma=0.1)

        checkpoint = torch.load('AlexNet.pkl', map_location='cpu')
        if checkpoint is not None:
            model.load_state_dict(checkpoint["net"])
            optimizer.load_state_dict(checkpoint["optimizer"])

        return self.test(model, img) == target
Example #2
0
    def __init__(self, input_shape, num_classes, learning_rate, clients_num):
        # 返回一个上下文管理器,这个上下管理器使用这个图作为要操作的图
        self.graph = tf.Graph()
        # tf.Session()创建一个会话,当上下文管理器退出时会话关闭和资源释放自动完成。
        self.sess = tf.Session(graph=self.graph)

        # 调用create函数来构建AlexNet的计算图
        # `net` 是一个list,依次包含模型中FedModel需要的计算节点(看上面)
        net = AlexNet(input_shape, num_classes, learning_rate, self.graph)
        print("net done")
        self.model = FedModel(*net)

        # 初始化
        # Variable:作为存储节点的变量(Variable)不是一个简单的节点,而是一副由四个子节点构成的子图:
        #         (1)变量的初始值——initial_value。
        #         (2)更新变量值的操作op——Assign。
        #         (3)读取变量值的操作op——read
        #         (4)变量操作——(a)
        # 上述四个步骤即:首先,将initial_value赋值(Assign)给节点,存储在(a)当中,当需要读取该变量时,调用read函数取值即可
        with self.graph.as_default():
            self.sess.run(tf.global_variables_initializer())

        # Load Cifar-10 dataset
        # NOTE: len(self.dataset.train) == clients_num
        # 加载数据集。对于训练集:`self.dataset.train[56]`可以获取56号client的数据集
        # `self.dataset.train[56].next_batch(32)`可以获取56号client的一个batch,大小为32
        # 对于测试集,所有client共用一个测试集,因此:
        # `self.dataset.test.next_batch(1000)`将获取大小为1000的数据集(无随机)
        # 这里已经把数据集划分成了多份,且每个client都有各自的一份
        self.dataset = Dataset(load_data_mnist, split=clients_num)
Example #3
0
    def __init__(self, input_shape, num_classes, learning_rate, clients_num):
        self.graph = tf.Graph()
        self.sess = tf.Session(graph=self.graph)

        # Call the create function to build the computational graph of AlexNet
        net = AlexNet(input_shape, num_classes, learning_rate, self.graph)
        self.model = FedModel(*net)

        # initialize
        with self.graph.as_default():
            self.sess.run(tf.global_variables_initializer())

        # Load Cifar-10 dataset
        # NOTE: len(self.dataset.train) == clients_num
        self.dataset = Dataset(tf.keras.datasets.cifar10.load_data,
                               split=clients_num)
Example #4
0
    def __init__(self, input_shape, num_classes, learning_rate, clients_num):
        self.graph = tf.Graph()
        self.sess = tf.Session(graph=self.graph)

        # 创建alxnet网络
        net = AlexNet(input_shape, num_classes, learning_rate, self.graph)
        #net = vgg_net(input_shape, num_classes, learning_rate, self.graph)
        self.model = FedModel(*net)

        # 初始化
        with self.graph.as_default():
            self.sess.run(tf.global_variables_initializer())

        # 装载数据
        # 根据训练客户端数量划分数据集
        self.dataset = Dataset(tf.keras.datasets.cifar10.load_data,split=clients_num)
    train_images, train_labels, y = load_pokemon()
    train_labels = to_categorical(train_labels, num_classes=num_classes)
    print(logger_name + ' train_images shape: {}'.format(train_images.shape))
    print(logger_name +
          ' train_images image shape: {}'.format(train_images[0].shape))
    print(logger_name + ' train_labels shape: {}'.format(train_labels.shape))
    print(logger_name + ' y image shape: {}'.format(y.shape))

    # Data normalization
    train_images = train_images.astype('float32')
    y = y.astype('float32')

    # train_images /= 255
    # y /= 255

    model = AlexNet(train_images[0].shape, num_classes)
    model.summary()

    # log_dir = "logs/alextnetfit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
    # tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)

    model.fit(train_images, y=train_labels, verbose=0)

    prediction_values = model.predict_classes(y)

    # 看一下預測結果
    fig = plt.figure(figsize=(15, 7))
    fig.subplots_adjust(left=0,
                        right=1,
                        bottom=0,
                        top=1,