本文整理汇总了Python中torch.autograd.Variable.astype方法的典型用法代码示例。如果您正苦于以下问题:Python Variable.astype方法的具体用法?Python Variable.astype怎么用?Python Variable.astype使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类torch.autograd.Variable
的用法示例。
在下文中一共展示了Variable.astype方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: roi_feature_transform
# 需要导入模块: from torch.autograd import Variable [as 别名]
# 或者: from torch.autograd.Variable import astype [as 别名]
def roi_feature_transform(self, blobs_in, rpn_ret, blob_rois='rois', method='RoIPoolF',
resolution=7, spatial_scale=1. / 16., sampling_ratio=0):
"""Add the specified RoI pooling method. The sampling_ratio argument
is supported for some, but not all, RoI transform methods.
RoIFeatureTransform abstracts away:
- Use of FPN or not
- Specifics of the transform method
"""
assert method in {'RoIPoolF', 'RoICrop', 'RoIAlign'}, \
'Unknown pooling method: {}'.format(method)
if isinstance(blobs_in, list):
# FPN case: add RoIFeatureTransform to each FPN level
device_id = blobs_in[0].get_device()
k_max = cfg.FPN.ROI_MAX_LEVEL # coarsest level of pyramid
k_min = cfg.FPN.ROI_MIN_LEVEL # finest level of pyramid
assert len(blobs_in) == k_max - k_min + 1
bl_out_list = []
for lvl in range(k_min, k_max + 1):
bl_in = blobs_in[k_max - lvl] # blobs_in is in reversed order
sc = spatial_scale[k_max - lvl] # in reversed order
bl_rois = blob_rois + '_fpn' + str(lvl)
if len(rpn_ret[bl_rois]):
rois = Variable(torch.from_numpy(rpn_ret[bl_rois])).cuda(device_id)
if method == 'RoIPoolF':
# Warning!: Not check if implementation matches Detectron
xform_out = RoIPoolFunction(resolution, resolution, sc)(bl_in, rois)
elif method == 'RoICrop':
# Warning!: Not check if implementation matches Detectron
grid_xy = net_utils.affine_grid_gen(
rois, bl_in.size()[2:], self.grid_size)
grid_yx = torch.stack(
[grid_xy.data[:, :, :, 1], grid_xy.data[:, :, :, 0]], 3).contiguous()
xform_out = RoICropFunction()(bl_in, Variable(grid_yx).detach())
if cfg.CROP_RESIZE_WITH_MAX_POOL:
xform_out = F.max_pool2d(xform_out, 2, 2)
elif method == 'RoIAlign':
xform_out = RoIAlignFunction(
resolution, resolution, sc, sampling_ratio)(bl_in, rois)
bl_out_list.append(xform_out)
# The pooled features from all levels are concatenated along the
# batch dimension into a single 4D tensor.
xform_shuffled = torch.cat(bl_out_list, dim=0)
# Unshuffle to match rois from dataloader
device_id = xform_shuffled.get_device()
restore_bl = rpn_ret[blob_rois + '_idx_restore_int32']
restore_bl = Variable(
torch.from_numpy(restore_bl.astype('int64', copy=False))).cuda(device_id)
xform_out = xform_shuffled[restore_bl]
else:
# Single feature level
# rois: holds R regions of interest, each is a 5-tuple
# (batch_idx, x1, y1, x2, y2) specifying an image batch index and a
# rectangle (x1, y1, x2, y2)
device_id = blobs_in.get_device()
rois = Variable(torch.from_numpy(rpn_ret[blob_rois])).cuda(device_id)
if method == 'RoIPoolF':
xform_out = RoIPoolFunction(resolution, resolution, spatial_scale)(blobs_in, rois)
elif method == 'RoICrop':
grid_xy = net_utils.affine_grid_gen(rois, blobs_in.size()[2:], self.grid_size)
grid_yx = torch.stack(
[grid_xy.data[:, :, :, 1], grid_xy.data[:, :, :, 0]], 3).contiguous()
xform_out = RoICropFunction()(blobs_in, Variable(grid_yx).detach())
if cfg.CROP_RESIZE_WITH_MAX_POOL:
xform_out = F.max_pool2d(xform_out, 2, 2)
elif method == 'RoIAlign':
xform_out = RoIAlignFunction(
resolution, resolution, spatial_scale, sampling_ratio)(blobs_in, rois)
return xform_out
示例2: sample_c
# 需要导入模块: from torch.autograd import Variable [as 别名]
# 或者: from torch.autograd.Variable import astype [as 别名]
def sample_c(size):
c = np.random.multinomial(1, 10*[0.1], size=size)
c = Variable(torch.from_numpy(c.astype('float32')))
return c
示例3: reset_grad
# 需要导入模块: from torch.autograd import Variable [as 别名]
# 或者: from torch.autograd.Variable import astype [as 别名]
crossent_loss = torch.mean(-torch.sum(c * torch.log(Q_c_given_x + 1e-8), dim=1))
ent_loss = torch.mean(-torch.sum(c * torch.log(c + 1e-8), dim=1))
mi_loss = crossent_loss + ent_loss
mi_loss.backward()
Q_solver.step()
# Housekeeping - reset gradient
reset_grad()
# Print and plot every now and then
if it % 1000 == 0:
idx = np.random.randint(0, 10)
c = np.zeros([mb_size, 10])
c[range(mb_size), idx] = 1
c = Variable(torch.from_numpy(c.astype('float32')))
samples = G(z, c).data.numpy()[:16]
print('Iter-{}; D_loss: {}; G_loss: {}; Idx: {}'
.format(it, D_loss.data.numpy(), G_loss.data.numpy(), idx))
fig = plt.figure(figsize=(4, 4))
gs = gridspec.GridSpec(4, 4)
gs.update(wspace=0.05, hspace=0.05)
for i, sample in enumerate(samples):
ax = plt.subplot(gs[i])
plt.axis('off')
ax.set_xticklabels([])
ax.set_yticklabels([])
ax.set_aspect('equal')
示例4: train_analogy_regressor
# 需要导入模块: from torch.autograd import Variable [as 别名]
# 或者: from torch.autograd.Variable import astype [as 别名]
def train_analogy_regressor(analogies, centroids, base_classes, trained_classifier, lr=0.1, wt=10, niter=120000, step_after=40000, batchsize=128, momentum=0.9, wd=0.0001):
# pre-permute analogies
permuted_analogies = analogies[np.random.permutation(analogies.shape[0])]
# create model and init
featdim = centroids[0].shape[1]
model = AnalogyRegressor(featdim)
model = model.cuda()
trained_classifier = trained_classifier.cuda()
optimizer = torch.optim.SGD(model.parameters(), lr, momentum=momentum, weight_decay=wd, dampening=momentum)
loss_1 = nn.CrossEntropyLoss().cuda()
loss_2 = nn.MSELoss().cuda()
num_clusters_per_class = centroids[0].shape[0]
centroid_labels = (np.array(base_classes).reshape((-1,1)) * np.ones((1, num_clusters_per_class))).reshape(-1)
concatenated_centroids = np.concatenate(centroids, axis=0)
start=0
avg_loss_1 = avg_loss_2 = count = 0.0
for i in range(niter):
# get current batch of analogies
stop = min(start+batchsize, permuted_analogies.shape[0])
to_train = permuted_analogies[start:stop,:]
optimizer.zero_grad()
# analogy is A:B :: C:D, goal is to predict B from A, C, D
# Y is the class label of B (and A)
A = concatenated_centroids[to_train[:,0]]
B = concatenated_centroids[to_train[:,1]]
C = concatenated_centroids[to_train[:,2]]
D = concatenated_centroids[to_train[:,3]]
Y = centroid_labels[to_train[:,1]]
A = Variable(torch.Tensor(A)).cuda()
B = Variable(torch.Tensor(B)).cuda()
C = Variable(torch.Tensor(C)).cuda()
D = Variable(torch.Tensor(D)).cuda()
Y = Variable(torch.LongTensor(Y.astype(int))).cuda()
Bhat = model(A,C,D)
lossval_2 = loss_2(Bhat, B) # simple mean squared error loss
# classification loss
predicted_classprobs = trained_classifier(Bhat)
lossval_1 = loss_1(predicted_classprobs, Y)
loss = lossval_1 + wt * lossval_2
loss.backward()
optimizer.step()
avg_loss_1 = avg_loss_1 + lossval_1.data[0]
avg_loss_2 = avg_loss_2 + lossval_2.data[0]
count = count+1.0
if i % 100 == 0:
print('{:d} : {:f}, {:f}, {:f}'.format(i, avg_loss_1/count, avg_loss_2/count, count))
avg_loss_1 = avg_loss_2 = count = 0.0
if (i+1) % step_after == 0:
lr = lr / 10.0
print(lr)
for param_group in optimizer.param_groups:
param_group['lr'] = lr
start = stop
if start==permuted_analogies.shape[0]:
start=0
return dict(model_state=model.state_dict(), concatenated_centroids=torch.Tensor(concatenated_centroids),
num_base_classes=len(centroids), num_clusters_per_class=num_clusters_per_class)
示例5: forward
# 需要导入模块: from torch.autograd import Variable [as 别名]
# 或者: from torch.autograd.Variable import astype [as 别名]
def forward(self, input_seqs):
""" Forward pass.
# Arguments:
input_seqs: Can be one of Numpy array, Torch.LongTensor, Torch.Variable, Torch.PackedSequence.
# Return:
Same format as input format (except for PackedSequence returned as Variable).
"""
# Check if we have Torch.LongTensor inputs or not Torch.Variable (assume Numpy array in this case), take note to return same format
return_numpy = False
return_tensor = False
if isinstance(input_seqs, (torch.LongTensor, torch.cuda.LongTensor)):
input_seqs = Variable(input_seqs)
return_tensor = True
elif not isinstance(input_seqs, Variable):
input_seqs = Variable(torch.from_numpy(input_seqs.astype('int64')).long())
return_numpy = True
# If we don't have a packed inputs, let's pack it
reorder_output = False
if not isinstance(input_seqs, PackedSequence):
ho = self.lstm_0.weight_hh_l0.data.new(2, input_seqs.size()[0], self.hidden_size).zero_()
co = self.lstm_0.weight_hh_l0.data.new(2, input_seqs.size()[0], self.hidden_size).zero_()
# Reorder batch by sequence length
input_lengths = torch.LongTensor([torch.max(input_seqs[i, :].data.nonzero()) + 1 for i in range(input_seqs.size()[0])])
input_lengths, perm_idx = input_lengths.sort(0, descending=True)
input_seqs = input_seqs[perm_idx][:, :input_lengths.max()]
# Pack sequence and work on data tensor to reduce embeddings/dropout computations
packed_input = pack_padded_sequence(input_seqs, input_lengths.cpu().numpy(), batch_first=True)
reorder_output = True
else:
ho = self.lstm_0.weight_hh_l0.data.data.new(2, input_seqs.size()[0], self.hidden_size).zero_()
co = self.lstm_0.weight_hh_l0.data.data.new(2, input_seqs.size()[0], self.hidden_size).zero_()
input_lengths = input_seqs.batch_sizes
packed_input = input_seqs
hidden = (Variable(ho, requires_grad=False), Variable(co, requires_grad=False))
# Embed with an activation function to bound the values of the embeddings
x = self.embed(packed_input.data)
x = nn.Tanh()(x)
# pyTorch 2D dropout2d operate on axis 1 which is fine for us
x = self.embed_dropout(x)
# Update packed sequence data for RNN
packed_input = PackedSequence(data=x, batch_sizes=packed_input.batch_sizes)
# skip-connection from embedding to output eases gradient-flow and allows access to lower-level features
# ordering of the way the merge is done is important for consistency with the pretrained model
lstm_0_output, _ = self.lstm_0(packed_input, hidden)
lstm_1_output, _ = self.lstm_1(lstm_0_output, hidden)
# Update packed sequence data for attention layer
packed_input = PackedSequence(data=torch.cat((lstm_1_output.data,
lstm_0_output.data,
packed_input.data), dim=1),
batch_sizes=packed_input.batch_sizes)
input_seqs, _ = pad_packed_sequence(packed_input, batch_first=True)
x, att_weights = self.attention_layer(input_seqs, input_lengths)
# output class probabilities or penultimate feature vector
if not self.feature_output:
x = self.final_dropout(x)
outputs = self.output_layer(x)
else:
outputs = x
# Reorder output if needed
if reorder_output:
reorered = Variable(outputs.data.new(outputs.size()))
reorered[perm_idx] = outputs
outputs = reorered
# Adapt return format if needed
if return_tensor:
outputs = outputs.data
if return_numpy:
outputs = outputs.data.numpy()
if self.return_attention:
return outputs, att_weights
else:
return outputs
示例6: main
# 需要导入模块: from torch.autograd import Variable [as 别名]
# 或者: from torch.autograd.Variable import astype [as 别名]
def main(params):
net = getattr(resnet, params['model'])()
net.load_state_dict(torch.load(os.path.join(params['model_root'], params['model'] + '.pth')))
my_resnet = myResnetV(net)
my_resnet.cuda()
my_resnet.eval() # set the model to evaluation mode. Affects Dropout and BatchNorm layers.
imgs = json.load(open(params['input_json'], 'r'))
imgs = imgs['images']
N = len(imgs)
seed(123) # make reproducible
dir_fc = params['output_dir'] + '_fc'
dir_att = params['output_dir'] + '_att'
if not os.path.isdir(dir_fc):
os.mkdir(dir_fc)
if not os.path.isdir(dir_att):
os.mkdir(dir_att)
seen_fc_att_shape = False
last_time = time.time()
for i, img in enumerate(imgs):
if i % (len(imgs) // 100) == 0:
now_time = time.time()
print('- processing %d/%d (%.2f%% done) time: %.2f' % (i, N, i * 100.0 / N, now_time - last_time))
last_time = now_time
# check if dest. file exists
if os.path.isfile(os.path.join(dir_fc, str(img['cocoid']) + '.npy')) \
and os.path.isfile(os.path.join(dir_att, str(img['cocoid']) + '.npz')):
continue
if 'coco' in params['input_json']:
# load the image
I = skimage.io.imread(os.path.join(params['images_root'], img['filepath'], img['filename']))
# handle grayscale input images
if len(I.shape) == 2:
I = I[:, :, np.newaxis]
I = np.concatenate((I, I, I), axis=2)
I = I.astype('float32') / 255.0
I = torch.from_numpy(I.transpose([2, 0, 1])).cuda() # (3, w, h)
I = Variable(preprocess(I), volatile=True)
tmp_fc, tmp_att = my_resnet(I, params['att_size'])
if not seen_fc_att_shape:
print('> tmp_fc shape:', tmp_fc.shape) # (2048,)
print('> tmp_att shape:', tmp_att.shape) # (14, 14, 2048)
seen_fc_att_shape = True
elif 'msvd' in params['input_json']:
# load images
frames = []
for frame_idx in range(26):
image_name = os.path.join(params['images_root'], '%d-%d.png' % (img['cocoid'], frame_idx))
I = skimage.io.imread(image_name)
if len(I.shape) == 2:
I = I[:, :, np.newaxis]
I = np.concatenate((I, I, I), axis=2)
I = I.astype('float32') / 255.0
I = I.transpose([2, 0, 1])
I = np.expand_dims(I, axis=0)
# I = torch.from_numpy(I.transpose([2, 0, 1])).cuda() # (3, w, d)
# I = Variable(preprocess(I), volatile=True)
frames.append(I)
elif 'kuaishou' in params['input_json']:
# load images
frames = []
for frame_idx in range(26):
try:
image_name = os.path.join(params['images_root'], '%d-%d.jpg' % (img['cocoid'], frame_idx + 1))
I = skimage.io.imread(image_name)
if len(I.shape) == 2:
I = I[:, :, np.newaxis]
I = np.concatenate((I, I, I), axis=2)
I = resize(I, (299, 299))
I = I.astype('float32') / 255.0
I = I.transpose([2, 0, 1])
I = np.expand_dims(I, axis=0)
# I = torch.from_numpy(I.transpose([2, 0, 1])).cuda() # (3, w, d)
# print('> image shape:', I.shape)
# I = Variab.le(preprocess(I), volatile=True)
frames.append(I)
except IOError:
# no such image file
if frame_idx > 0:
frames.append(frames[frame_idx - 1])
else:
raise ValueError('! image not found: %d-%d.jpg' % (img['cocoid'], frame_idx + 1))
img_b = np.vstack(frames)
img_b = torch.from_numpy(img_b).cuda()
img_b = Variable(preprocess(img_b), volatile=True)
#.........这里部分代码省略.........