def __init__(self, n_head, d_model, d_k, d_v, dropout=0.1):
super(MultiHeadAttention, self).__init__()
self.n_head = n_head
self.d_k = d_k
self.d_v = d_v
self.w_qs = nn.Parameter(torch.FloatTensor(n_head, d_model, d_k))
self.w_ks = nn.Parameter(torch.FloatTensor(n_head, d_model, d_k))
self.w_vs = nn.Parameter(torch.FloatTensor(n_head, d_model, d_v))
self.attention = ScaledDotProductAttention(d_model)
self.layer_norm = LayerNormalization(d_model)
self.proj = Linear(n_head*d_v, d_model)
self.dropout = nn.Dropout(dropout)
init.xavier_normal(self.w_qs)
init.xavier_normal(self.w_ks)
init.xavier_normal(self.w_vs)
python类FloatTensor()的实例源码
SubLayers.py 文件源码
项目:attention-is-all-you-need-pytorch
作者: jadore801120
项目源码
文件源码
阅读 25
收藏 0
点赞 0
评论 0
def setUttEncoder(module): # set utterance encoder to the module
if SharedModel.args.utt_enc_noise == True:
module.uttEncNoise = Variable(torch.FloatTensor(), volatile=True)
if SharedModel.args.no_cuda == False:
module.uttEncNoise = module.uttEncNoise.cuda()
if SharedModel.args.utt_enc_type >= 2:
module.uttEncoder = nn.ModuleList()
for i in [int(x) for x in SharedModel.args.conv_filters.split('_')]:
module.uttEncoder.append( nn.Conv1d(2*SharedModel.args.hid_dim * (2 if SharedModel.args.attn == 2 else 1), SharedModel.args.conv_out_dim, i, 1, int(math.ceil((i-1)/2))) )
if SharedModel.args.utt_enc_bn == True:
uttEncOutSize = 2 * SharedModel.args.hid_dim
if SharedModel.args.utt_enc_type >= 2:
uttEncOutSize = 3 * SharedModel.args.conv_out_dim
elif SharedModel.args.attn == 2:
uttEncOutSize = 4 * SharedModel.args.hid_dim
module.uttBn = nn.BatchNorm1d(uttEncOutSize)
def detection_collate(batch):
"""Custom collate fn for dealing with batches of images that have a different
number of associated object annotations (bounding boxes).
Arguments:
batch: (tuple) A tuple of tensor images and lists of annotations
Return:
A tuple containing:
1) (tensor) batch of images stacked on their 0 dim
2) (list of tensors) annotations for a given image are stacked on 0 dim
"""
targets = []
imgs = []
for sample in batch:
imgs.append(sample[0])
targets.append(torch.FloatTensor(sample[1]))
return torch.stack(imgs, 0), targets
def detection_collate(batch):
"""Custom collate fn for dealing with batches of images that have a different
number of associated object annotations (bounding boxes).
Arguments:
batch: (tuple) A tuple of tensor images and lists of annotations
Return:
A tuple containing:
1) (tensor) batch of images stacked on their 0 dim
2) (list of tensors) annotations for a given image are stacked on 0 dim
"""
targets = []
imgs = []
image_ids = []
for sample in batch:
imgs.append(sample[0])
targets.append(torch.FloatTensor(sample[1]))
image_ids.append(sample[2])
return torch.stack(imgs, 0), targets, image_ids
def __init__(self, num_features, max_length, eps=1e-5, momentum=0.1,
affine=True):
"""
Most parts are copied from
torch.nn.modules.batchnorm._BatchNorm.
"""
super(SeparatedBatchNorm1d, self).__init__()
self.num_features = num_features
self.max_length = max_length
self.affine = affine
self.eps = eps
self.momentum = momentum
if self.affine:
self.weight = nn.Parameter(torch.FloatTensor(num_features))
self.bias = nn.Parameter(torch.FloatTensor(num_features))
else:
self.register_parameter('weight', None)
self.register_parameter('bias', None)
for i in range(max_length):
self.register_buffer(
'running_mean_{}'.format(i), torch.zeros(num_features))
self.register_buffer(
'running_var_{}'.format(i), torch.ones(num_features))
self.reset_parameters()
def __init__(self, input_size, hidden_size, use_bias=True):
"""
Most parts are copied from torch.nn.LSTMCell.
"""
super(LSTMCell, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.use_bias = use_bias
self.weight_ih = nn.Parameter(
torch.FloatTensor(input_size, 4 * hidden_size))
self.weight_hh = nn.Parameter(
torch.FloatTensor(hidden_size, 4 * hidden_size))
if use_bias:
self.bias = nn.Parameter(torch.FloatTensor(4 * hidden_size))
else:
self.register_parameter('bias', None)
self.reset_parameters()
def __init__(self, input_size, hidden_size, max_length, use_bias=True):
super(BNLSTMCell, self).__init__()
self.input_size = input_size
self.hidden_size = hidden_size
self.max_length = max_length
self.use_bias = use_bias
self.weight_ih = nn.Parameter(
torch.FloatTensor(input_size, 4 * hidden_size))
self.weight_hh = nn.Parameter(
torch.FloatTensor(hidden_size, 4 * hidden_size))
if use_bias:
self.bias = nn.Parameter(torch.FloatTensor(4 * hidden_size))
else:
self.register_parameter('bias', None)
# BN parameters
self.bn_ih = SeparatedBatchNorm1d(
num_features=4 * hidden_size, max_length=max_length)
self.bn_hh = SeparatedBatchNorm1d(
num_features=4 * hidden_size, max_length=max_length)
self.bn_c = SeparatedBatchNorm1d(
num_features=hidden_size, max_length=max_length)
self.reset_parameters()
def __getitem__(self, index):
support_set_x = torch.FloatTensor(self.n_samples, 3, 84, 84)
support_set_y = np.zeros((self.n_samples), dtype=np.int)
target_x = torch.FloatTensor(self.n_samples_eval, 3, 84, 84)
target_y = np.zeros((self.n_samples_eval), dtype=np.int)
flatten_support_set_x_batch = [os.path.join(self.miniImagenetImagesDir,item)
for sublist in self.support_set_x_batch[index] for item in sublist]
support_set_y = np.array([self.classes_dict[item[:9]]
for sublist in self.support_set_x_batch[index] for item in sublist])
flatten_target_x = [os.path.join(self.miniImagenetImagesDir,item)
for sublist in self.target_x_batch[index] for item in sublist]
target_y = np.array([self.classes_dict[item[:9]]
for sublist in self.target_x_batch[index] for item in sublist])
for i,path in enumerate(flatten_support_set_x_batch):
if self.transform is not None:
support_set_x[i] = self.transform(path)
for i,path in enumerate(flatten_target_x):
if self.transform is not None:
target_x[i] = self.transform(path)
return support_set_x, torch.IntTensor(support_set_y), target_x, torch.IntTensor(target_y)
def test(netG, opt):
assert opt.netG != ''
test_dir = opt.testdata_dir
for f in os.listdir(test_dir):
fname, ext = os.path.splitext(f)
if ext == '.cmp':
print(fname)
cmp_file = os.path.join(test_dir, f)
ac_data = read_binary_file(cmp_file, dim=47)
ac_data = torch.FloatTensor(ac_data)
noise = torch.FloatTensor(ac_data.size(0), nz)
if opt.cuda:
ac_data, noise = ac_data.cuda(), noise.cuda()
ac_data = Variable(ac_data)
noise = Variable(noise)
noise.data.normal_(0, 1)
generated_pulses = netG(noise, ac_data)
generated_pulses = generated_pulses.data.cpu().numpy()
generated_pulses = generated_pulses.reshape(ac_data.size(0), -1)
out_file = os.path.join(test_dir, fname + '.pls')
with open(out_file, 'wb') as fid:
generated_pulses.tofile(fid)
def forward(self, pos_u, pos_v, neg_u, neg_v):
losses = []
emb_u = []
for i in range(len(pos_u)):
emb_ui = self.u_embeddings(Variable(torch.LongTensor(pos_u[i])))
emb_u.append(np.sum(emb_ui.data.numpy(), axis=0).tolist())
emb_u = Variable(torch.FloatTensor(emb_u))
emb_v = self.v_embeddings(Variable(torch.LongTensor(pos_v)))
score = torch.mul(emb_u, emb_v)
score = torch.sum(score, dim=1)
score = F.logsigmoid(score)
losses.append(sum(score))
neg_emb_u = []
for i in range(len(neg_u)):
neg_emb_ui = self.u_embeddings(Variable(torch.LongTensor(neg_u[i])))
neg_emb_u.append(np.sum(neg_emb_ui.data.numpy(), axis=0).tolist())
neg_emb_u = Variable(torch.FloatTensor(neg_emb_u))
neg_emb_v = self.v_embeddings(Variable(torch.LongTensor(neg_v)))
neg_score = torch.mul(neg_emb_u, neg_emb_v)
neg_score = torch.sum(neg_score, dim=1)
neg_score = F.logsigmoid(-1 * neg_score)
losses.append(sum(neg_score))
return -1 * sum(losses)
def prepare_message(self, target_features, source_features, select_mat, gate_module):
feature_data = []
transfer_list = np.where(select_mat > 0)
source_indices = Variable(torch.from_numpy(transfer_list[1]).type(torch.LongTensor)).cuda()
target_indices = Variable(torch.from_numpy(transfer_list[0]).type(torch.LongTensor)).cuda()
source_f = torch.index_select(source_features, 0, source_indices)
target_f = torch.index_select(target_features, 0, target_indices)
transferred_features = gate_module(target_f, source_f)
for f_id in range(target_features.size()[0]):
if len(np.where(select_mat[f_id, :] > 0)[0]) > 0:
feature_indices = np.where(transfer_list[0] == f_id)[0]
indices = Variable(torch.from_numpy(feature_indices).type(torch.LongTensor)).cuda()
features = torch.index_select(transferred_features, 0, indices).mean(0).view(-1)
feature_data.append(features)
else:
temp = Variable(torch.zeros(target_features.size()[1:]), requires_grad=True).type(torch.FloatTensor).cuda()
feature_data.append(temp)
return torch.stack(feature_data, 0)
def value(self):
"""Returns the model's average precision for each class
Return:
ap (FloatTensor): 1xK tensor, with avg precision for each class k
"""
if self.scores.numel() == 0:
return 0
ap = torch.zeros(self.scores.size(1))
rg = torch.arange(1, self.scores.size(0)).float()
# compute average precision for each class
for k in range(self.scores.size(1)):
# sort scores
scores = self.scores[:, k]
targets = self.targets[:, k]
# compute average precision
ap[k] = AveragePrecisionMeter.average_precision(scores, targets, self.difficult_examples)
return ap
def MAP(ground_label: torch.FloatTensor, predict_label: torch.FloatTensor):
map = 0
map_idx = 0
extracted = {}
for idx_, glab in enumerate(ground_label):
if ground_label[idx_] != 0:
extracted[idx_] = 1
val, key = torch.sort(predict_label, 0, True)
for i, idx_ in enumerate(key):
if idx_ in extracted:
map_idx += 1
map += map_idx / (i + 1)
assert (map_idx != 0)
map = map / map_idx
return map
def MRR(ground_label: torch.FloatTensor, predict_label: torch.FloatTensor):
mrr = 0
map_idx = 0
extracted = {}
for idx_, glab in enumerate(ground_label):
if ground_label[idx_] != 0:
extracted[idx_] = 1
val, key = torch.sort(predict_label, 0, True)
for i, idx_ in enumerate(key):
if idx_ in extracted:
mrr = 1.0 / (i + 1)
break
assert (mrr != 0)
return mrr
def uniform_weights(n_sample):
"""Return uniform weights (almost for debug).
EXAMPLE
-------
>>> weights = uniform_weights(3)
>>> print(weights)
<BLANKLINE>
0.3333
0.3333
0.3333
[torch.FloatTensor of size 3]
<BLANKLINE>
:return:
"""
weights = torch.ones(n_sample)
return weights / weights.sum()
def __init__(self, in_channels, out_channels, kernel_size, bias=True):
super().__init__()
self.conv_t = nn.ConvTranspose1d(
in_channels=in_channels,
out_channels=out_channels,
kernel_size=kernel_size,
stride=kernel_size,
bias=False
)
if bias:
self.bias = nn.Parameter(
torch.FloatTensor(out_channels, kernel_size)
)
else:
self.register_parameter('bias', None)
self.reset_parameters()
def set_cuda(cuda, device=0):
global cuda_enabled
global cuda_device
global Tensor
global beta_integration_domain
if torch.cuda.is_available() and cuda:
cuda_enabled = True
cuda_device = device
torch.cuda.set_device(device)
torch.backends.cudnn.enabled = True
Tensor = torch.cuda.FloatTensor
beta_integration_domain = beta_integration_domain.cuda()
else:
cuda_enabled = False
Tensor = torch.FloatTensor
beta_integration_domain = beta_integration_domain.cpu()
def checkOneHot(self):
v = torch.LongTensor([1, 2, 1, 2, 0])
v_length = torch.LongTensor([2, 3])
v_onehot = utils.oneHot(v, v_length, 4)
target = torch.FloatTensor([[[0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 0]],
[[0, 1, 0, 0], [0, 0, 1, 0], [1, 0, 0, 0]]])
assert target.equal(v_onehot)
def oneHot(v, v_length, nc):
batchSize = v_length.size(0)
maxLength = v_length.max()
v_onehot = torch.FloatTensor(batchSize, maxLength, nc).fill_(0)
acc = 0
for i in range(batchSize):
length = v_length[i]
label = v[acc:acc + length].view(-1, 1).long()
v_onehot[i, :length].scatter_(1, label, 1.0)
acc += length
return v_onehot
def gen_minibatch(tokens, features, labels, mini_batch_size, shuffle= True):
tokens = np.asarray(tokens)[np.where(labels!=0.5)[0]]
if type(features) is np.ndarray:
features = np.asarray(features)[np.where(labels!=0.5)[0]]
else:
features = np.asarray(features.todense())[np.where(labels!=0.5)[0]]
labels = np.asarray(labels)[np.where(labels!=0.5)[0]]
# print tokens.shape
# print tokens[0]
for token, feature, label in iterate_minibatches(tokens, features, labels, mini_batch_size, shuffle = shuffle):
# print 'token', type(token)
# print token
token = [_ for _ in pad_batch(token)]
# print len(token), token[0].size(), token[1].size()
yield token, Variable(torch.from_numpy(feature)) , Variable(torch.FloatTensor(label), requires_grad= False)