本文整理汇总了Python中torch.utils.data.sampler.SubsetRandomSampler方法的典型用法代码示例。如果您正苦于以下问题:Python sampler.SubsetRandomSampler方法的具体用法?Python sampler.SubsetRandomSampler怎么用?Python sampler.SubsetRandomSampler使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类torch.utils.data.sampler
的用法示例。
在下文中一共展示了sampler.SubsetRandomSampler方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: update
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def update(self):
if self.memory_count >= self.capacity:
state = torch.tensor([t.state for t in self.memory]).float()
action = torch.LongTensor([t.action for t in self.memory]).view(-1,1).long()
reward = torch.tensor([t.reward for t in self.memory]).float()
next_state = torch.tensor([t.next_state for t in self.memory]).float()
reward = (reward - reward.mean()) / (reward.std() + 1e-7)
with torch.no_grad():
target_v = reward + self.gamma * self.target_net(next_state).max(1)[0]
#Update...
for index in BatchSampler(SubsetRandomSampler(range(len(self.memory))), batch_size=self.batch_size, drop_last=False):
v = (self.act_net(state).gather(1, action))[index]
loss = self.loss_func(target_v[index].unsqueeze(1), (self.act_net(state).gather(1, action))[index])
self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
self.writer.add_scalar('loss/value_loss', loss, self.update_count)
self.update_count +=1
if self.update_count % 100 ==0:
self.target_net.load_state_dict(self.act_net.state_dict())
else:
print("Memory Buff is too less")
示例2: sample
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def sample(self, advantages, num_mini_batch):
num_steps, num_processes = self.rewards.size()[0:2]
batch_size = num_processes * num_steps
# Make sure we have at least enough for a bunch of batches of size 1.
assert batch_size >= num_mini_batch
mini_batch_size = batch_size // num_mini_batch
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
observations_batch = self.observations[:-1].view(-1,
*self.observations.size()[2:])[indices]
actions_batch = self.actions.view(-1, self.actions.size(-1))[indices]
return_batch = self.returns[:-1].view(-1, 1)[indices]
masks_batch = self.masks[:-1].view(-1, 1)[indices]
old_action_log_probs_batch = self.action_log_probs.view(-1, 1)[indices]
adv = advantages.view(-1, 1)[indices]
yield observations_batch, actions_batch, \
return_batch, masks_batch, old_action_log_probs_batch, adv
示例3: feed_forward_generator
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def feed_forward_generator(self, advantages, num_mini_batch):
num_steps, num_processes = self.rewards.size()[0:2]
batch_size = num_processes * num_steps
assert batch_size >= num_mini_batch, (
"PPO requires the number of processes ({}) "
"* number of steps ({}) = {} "
"to be greater than or equal to the number of PPO mini batches ({})."
"".format(num_processes, num_steps, num_processes * num_steps, num_mini_batch))
mini_batch_size = batch_size // num_mini_batch
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
obs_batch = self.obs[:-1].view(-1, *self.obs.size()[2:])[indices]
recurrent_hidden_states_batch = self.recurrent_hidden_states[:-1].view(-1,
self.recurrent_hidden_states.size(-1))[indices]
actions_batch = self.actions.view(-1, self.actions.size(-1))[indices]
value_preds_batch = self.value_preds[:-1].view(-1, 1)[indices]
return_batch = self.returns[:-1].view(-1, 1)[indices]
masks_batch = self.masks[:-1].view(-1, 1)[indices]
old_action_log_probs_batch = self.action_log_probs.view(-1, 1)[indices]
adv_targ = advantages.view(-1, 1)[indices]
yield obs_batch, recurrent_hidden_states_batch, actions_batch, \
value_preds_batch, return_batch, masks_batch, old_action_log_probs_batch, adv_targ
示例4: feed_forward_generator
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def feed_forward_generator(self, advantages, num_mini_batch):
num_steps, num_processes = self.rewards.size()[0:2]
batch_size = num_processes * num_steps
assert batch_size >= num_mini_batch, (
"PPO requires the number of processes ({}) "
"* number of steps ({}) = {} "
"to be greater than or equal to the number of PPO mini batches ({})."
"".format(num_processes, num_steps, num_processes * num_steps, num_mini_batch))
mini_batch_size = batch_size // num_mini_batch
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
obs_batch = self.obs[:-1].view(-1, *self.obs.size()[2:])[indices]
recurrent_hidden_states_batch = self.recurrent_hidden_states[:-1].view(-1,
self.recurrent_hidden_states.size(-1))[indices]
actions_batch = self.actions.view(-1, self.actions.size(-1))[indices]
return_batch = self.returns[:-1].view(-1, 1)[indices]
masks_batch = self.masks[:-1].view(-1, 1)[indices]
old_action_log_probs_batch = self.action_log_probs.view(-1, 1)[indices]
adv_targ = advantages.view(-1, 1)[indices]
yield obs_batch, recurrent_hidden_states_batch, actions_batch, \
return_batch, masks_batch, old_action_log_probs_batch, adv_targ
示例5: getDataloader
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def getDataloader(trainset, testset, valid_size, batch_size, num_workers):
num_train = len(trainset)
indices = list(range(num_train))
np.random.shuffle(indices)
split = int(np.floor(valid_size * num_train))
train_idx, valid_idx = indices[split:], indices[:split]
train_sampler = SubsetRandomSampler(train_idx)
valid_sampler = SubsetRandomSampler(valid_idx)
train_loader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
sampler=train_sampler, num_workers=num_workers)
valid_loader = torch.utils.data.DataLoader(trainset, batch_size=batch_size,
sampler=valid_sampler, num_workers=num_workers)
test_loader = torch.utils.data.DataLoader(testset, batch_size=batch_size,
num_workers=num_workers)
return train_loader, valid_loader, test_loader
示例6: _split_sampler
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def _split_sampler(self, split):
if split == 0.0:
return None, None
idx_full = np.arange(self.n_samples)
np.random.seed(0)
np.random.shuffle(idx_full)
len_valid = int(self.n_samples * split)
valid_idx = idx_full[0:len_valid]
train_idx = np.delete(idx_full, np.arange(0, len_valid))
train_sampler = SubsetRandomSampler(train_idx)
valid_sampler = SubsetRandomSampler(valid_idx)
# turn off shuffle option which is mutually exclusive with sampler
self.shuffle = False
self.n_samples = len(train_idx)
return train_sampler, valid_sampler
示例7: feed_forward_generator
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def feed_forward_generator(self, advantages, num_mini_batch):
num_steps, num_processes = self.rewards.size()[0:2]
batch_size = num_processes * num_steps
mini_batch_size = batch_size // num_mini_batch
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
indices = torch.LongTensor(indices)
if advantages.is_cuda:
indices = indices.cuda()
observations_batch = self.observations[:-1].view(-1,
*self.observations.size()[2:])[indices]
actions_batch = self.actions.view(-1, self.actions.size(-1))[indices]
return_batch = self.returns[:-1].view(-1, 1)[indices]
masks_batch = self.masks[:-1].view(-1, 1)[indices]
old_action_log_probs_batch = self.action_log_probs.view(-1, 1)[indices]
adv_targ = advantages.view(-1, 1)[indices]
yield observations_batch, actions_batch, \
return_batch, masks_batch, old_action_log_probs_batch, adv_targ
开发者ID:BoyuanYan,项目名称:Actor-Critic-Based-Resource-Allocation-for-Multimodal-Optical-Networks,代码行数:23,代码来源:storage.py
示例8: _split_sampler
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def _split_sampler(self, split):
if split == 0.0:
return None, None
self.shuffle = False
split_indx = int(self.nbr_examples * split)
np.random.seed(0)
indxs = np.arange(self.nbr_examples)
np.random.shuffle(indxs)
train_indxs = indxs[split_indx:]
val_indxs = indxs[:split_indx]
self.nbr_examples = len(train_indxs)
train_sampler = SubsetRandomSampler(train_indxs)
val_sampler = SubsetRandomSampler(val_indxs)
return train_sampler, val_sampler
示例9: split_dataset
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def split_dataset(dataset, split_ratio, batch_size, shuffle_split=False):
# creating data indices for training and tuning splits
dataset_size = len(dataset)
indices = list(range(dataset_size))
split = int(dataset_size * split_ratio)
if shuffle_split:
np.random.seed(args.seed)
np.random.shuffle(indices)
train_indices = indices[split:]
tune_indices = indices[:split]
train_sampler = SubsetRandomSampler(train_indices)
tune_sampler = SubsetRandomSampler(tune_indices)
train_iterator = DataLoader(dataset, batch_size=batch_size, sampler=train_sampler)
tune_iterator = DataLoader(dataset, batch_size=batch_size, sampler=tune_sampler)
return train_iterator, tune_iterator
示例10: feed_forward_generator
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def feed_forward_generator(self, advantages, num_mini_batch):
num_steps, num_processes = self.rewards.size()[0:2]
batch_size = num_processes * num_steps
assert batch_size >= num_mini_batch, (
f"PPO requires the number processes ({num_processes}) "
f"* number of steps ({num_steps}) = {num_processes * num_steps} "
f"to be greater than or equal to the number of PPO mini batches ({num_mini_batch}).")
mini_batch_size = batch_size // num_mini_batch
observations_batch = {}
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
for k, sensor_ob in self.observations.items():
observations_batch[k] = sensor_ob[:-1].view(-1, *sensor_ob.size()[2:])[indices]
states_batch = self.states[:-1].view(-1, self.states.size(-1))[indices]
actions_batch = self.actions.view(-1, self.actions.size(-1))[indices]
return_batch = self.returns[:-1].view(-1, 1)[indices]
masks_batch = self.masks[:-1].view(-1, 1)[indices]
old_action_log_probs_batch = self.action_log_probs.view(-1, 1)[indices]
adv_targ = advantages.view(-1, 1)[indices]
yield observations_batch, states_batch, actions_batch, \
return_batch, masks_batch, old_action_log_probs_batch, adv_targ
示例11: feed_forward_generator
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def feed_forward_generator(self, advantages, num_mini_batch, sampler=None):
num_steps, num_processes = self.rewards.size()[0:2]
batch_size = num_processes * num_steps
assert batch_size >= num_mini_batch, (
"PPO requires the number of processes ({}) "
"* number of steps ({}) = {} "
"to be greater than or equal to the number of PPO mini batches ({})."
"".format(num_processes, num_steps, num_processes * num_steps, num_mini_batch))
mini_batch_size = batch_size // num_mini_batch
if sampler is None:
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
obs_batch = self.obs[:-1].view(-1, *self.obs.size()[2:])[indices]
recurrent_hidden_states_batch = self.recurrent_hidden_states[:-1].view(-1,
self.recurrent_hidden_states.size(-1))[indices]
actions_batch = self.actions.view(-1, self.actions.size(-1))[indices]
value_preds_batch = self.value_preds[:-1].view(-1, 1)[indices]
return_batch = self.returns[:-1].view(-1, 1)[indices]
masks_batch = self.masks[:-1].view(-1, 1)[indices]
old_action_log_probs_batch = self.action_log_probs.view(-1, 1)[indices]
adv_targ = advantages.view(-1, 1)[indices]
yield obs_batch, recurrent_hidden_states_batch, actions_batch, value_preds_batch, return_batch, \
masks_batch, old_action_log_probs_batch, adv_targ
示例12: magent_feed_forward_generator
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def magent_feed_forward_generator(rollouts_list, advantages_list, num_mini_batch):
num_steps, num_processes = rollouts_list[0].rewards.size()[0:2]
batch_size = num_processes * num_steps
mini_batch_size = int((batch_size/num_mini_batch)) # size of minibatch for each agent
sampler = BatchSampler(SubsetRandomSampler(range(batch_size)), mini_batch_size, drop_last=False)
for indices in sampler:
obs_batch=torch.cat([rollout.obs[:-1].view(-1,*rollout.obs.size()[2:])[indices] for rollout in rollouts_list],0)
recurrent_hidden_states_batch = torch.cat([rollout.recurrent_hidden_states[:-1].view(-1,
rollout.recurrent_hidden_states.size(-1))[indices] for rollout in rollouts_list],0)
actions_batch = torch.cat([rollout.actions.view(-1,
rollout.actions.size(-1))[indices] for rollout in rollouts_list],0)
value_preds_batch=torch.cat([rollout.value_preds[:-1].view(-1, 1)[indices] for rollout in rollouts_list],0)
return_batch = torch.cat([rollout.returns[:-1].view(-1, 1)[indices] for rollout in rollouts_list],0)
masks_batch = torch.cat([rollout.masks[:-1].view(-1, 1)[indices] for rollout in rollouts_list],0)
old_action_log_probs_batch=torch.cat([rollout.action_log_probs.view(-1,1)[indices] for rollout in rollouts_list],0)
adv_targ = torch.cat([advantages.view(-1, 1)[indices] for advantages in advantages_list],0)
yield obs_batch, recurrent_hidden_states_batch, actions_batch, value_preds_batch, return_batch,\
masks_batch, old_action_log_probs_batch, adv_targ
示例13: __init__
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def __init__(self, data_source, languages, batch_size, data_parallel_devices=1, shuffle=True, drop_last=False):
assert batch_size % (len(languages) * data_parallel_devices) == 0, (
'Batch size must be divisible by number of languages times the number of data parallel devices (if enabled).')
label_indices = {}
for idx in range(len(data_source)):
label = data_source.items[idx]['language']
if label not in label_indices: label_indices[label] = []
label_indices[label].append(idx)
if shuffle:
self._samplers = [SubsetRandomSampler(label_indices[i]) for i, _ in enumerate(languages)]
else:
self._samplers = [SubsetSampler(label_indices[i]) for i, _ in enumerate(languages)]
self._batch_size = batch_size
self._drop_last = drop_last
self._dp_devices = data_parallel_devices
示例14: train_valid_load
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def train_valid_load(dataset, validSize=0.1, isShuffle=True, seed=123, **kwargs):
r"""Utility to split a training set into a validation and a training one.
Note:
This shouldn't be used if the train and test data are prprocessed differently.
E.g. if you use dropout or a dictionnary for word embeddings.
Args:
dataset (torch.utils.data.Dataset): Dataset to split.
validSize (float,optional): Percentage to keep for the validation set. In [0,1}.
isShuffle (bool,optional): Whether should shuffle before splitting.
seed (int, optional): sets the seed for generating random numbers.
kwargs: Additional arguments to the `DataLoaders`.
Returns:
The train and the valid DataLoader, respectively.
"""
assert 0 <= validSize <= 1, "validSize:{}. Should be in [0,1]".format(validSize)
np.random.seed(seed)
torch.random.manual_seed(seed)
if validSize == 0:
return DataLoader(dataset, **kwargs), iter(())
nTrain = len(dataset)
idcs = np.arange(nTrain)
splitIdx = int(validSize * nTrain)
if isShuffle:
np.random.shuffle(idcs)
trainIdcs, validIdcs = idcs[splitIdx:], idcs[:splitIdx]
trainSampler = SubsetRandomSampler(trainIdcs)
validSampler = SubsetRandomSampler(validIdcs)
trainLoader = DataLoader(dataset, sampler=trainSampler, **kwargs)
validLoader = DataLoader(dataset, sampler=validSampler, **kwargs)
return trainLoader, validLoader
示例15: update
# 需要导入模块: from torch.utils.data import sampler [as 别名]
# 或者: from torch.utils.data.sampler import SubsetRandomSampler [as 别名]
def update(self):
self.training_step +=1
state = torch.tensor([t.state for t in self.buffer ], dtype=torch.float)
action = torch.tensor([t.action for t in self.buffer], dtype=torch.float).view(-1, 1)
reward = torch.tensor([t.reward for t in self.buffer], dtype=torch.float).view(-1, 1)
next_state = torch.tensor([t.next_state for t in self.buffer], dtype=torch.float)
old_action_log_prob = torch.tensor([t.a_log_prob for t in self.buffer], dtype=torch.float).view(-1, 1)
reward = (reward - reward.mean())/(reward.std() + 1e-10)
with torch.no_grad():
target_v = reward + args.gamma * self.critic_net(next_state)
advantage = (target_v - self.critic_net(state)).detach()
for _ in range(self.ppo_epoch): # iteration ppo_epoch
for index in BatchSampler(SubsetRandomSampler(range(self.buffer_capacity), self.batch_size, True)):
# epoch iteration, PPO core!!!
mu, sigma = self.actor_net(state[index])
n = Normal(mu, sigma)
action_log_prob = n.log_prob(action[index])
ratio = torch.exp(action_log_prob - old_action_log_prob)
L1 = ratio * advantage[index]
L2 = torch.clamp(ratio, 1-self.clip_param, 1+self.clip_param) * advantage[index]
action_loss = -torch.min(L1, L2).mean() # MAX->MIN desent
self.actor_optimizer.zero_grad()
action_loss.backward()
nn.utils.clip_grad_norm_(self.actor_net.parameters(), self.max_grad_norm)
self.actor_optimizer.step()
value_loss = F.smooth_l1_loss(self.critic_net(state[index]), target_v[index])
self.critic_net_optimizer.zero_grad()
value_loss.backward()
nn.utils.clip_grad_norm_(self.critic_net.parameters(), self.max_grad_norm)
self.critic_net_optimizer.step()
del self.buffer[:]