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
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)
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)
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,