我在google colab中运行以下代码片段:
%debug
# Create tensors of shape (10, 3) and (10, 2).
x = torch.randn(10, 3)
y = torch.randn(10, 2)
# Build a fully connected layer.
linear = nn.Linear(3, 2)
print ('w: ', linear.weight)
print ('b: ', linear.bias)
Run Code Online (Sandbox Code Playgroud)
我希望调试一段代码(逐行逐步)以了解发生了什么.我想进入函数nn.Linear.
但是,当我单步执行时,它根本不会进入该功能.有没有办法逐行逐步通过nn.Linear?另外,我究竟如何在nn.Linear中设置断点?此外,我希望逐行逐步浏览片段.但是,如图所示,步骤命令也会自动逐步执行并执行print语句.
所以我基本上将这个变换器实现用于我的项目:https://github.com/Kyubyong/transformer.它最初编写的德语到英语翻译效果很好,我修改了处理python脚本,以便为我想要翻译的语言创建词汇表文件.这似乎工作正常.
但是,当涉及到培训时,我收到以下错误:
InvalidArgumentError(请参阅上面的回溯):从检查点恢复失败.这很可能是由于当前图表与检查点图表不匹配造成的.请确保您没有根据检查点更改预期的图表.原始错误:
分配要求两个张量的形状匹配.lhs shape = [9796,512] rhs shape = [9786,512] [[{{node save/Assign_412}} =分配[T = DT_FLOAT,_class = ["loc:@ encoder/enc_embed/lookup_table"],use_locking = true,validate_shape = true,_device ="/ job:localhost/replica:0/task:0/device:CPU:0"](encoder/enc_embed/lookup_table/Adam_1,save/RestoreV2:412)]]
现在我不知道为什么我收到上述错误.我还恢复了原始代码,从德语翻译成英语,现在我得到了相同的错误(除了lhs和rhs张量形状当然不同),在它工作之前!
关于为什么会发生这种情况的任何想法?
提前致谢
编辑:这是有问题的特定文件在这里,train.py当它运行:https://github.com/Kyubyong/transformer/blob/master/train.py 什么也没有比一个事实,即词汇修饰等为de和en加载的是不同的(它们实际上是单个字母作为单词的词汇文件).然而,正如我所提到的那样,即使回到流行的工作示例,我也会得到与不同的lhs和rhs尺寸相同的错误.
我正在argmax研究 PyTorch 的功能,其定义为:
torch.argmax(input, dim=None, keepdim=False)
Run Code Online (Sandbox Code Playgroud)
考虑一个例子
a = torch.randn(4, 4)
print(a)
print(torch.argmax(a, dim=1))
Run Code Online (Sandbox Code Playgroud)
在这里,当我使用 dim=1 而不是搜索列向量时,该函数会搜索行向量,如下所示。
print(a) :
tensor([[-1.7739, 0.8073, 0.0472, -0.4084],
[ 0.6378, 0.6575, -1.2970, -0.0625],
[ 1.7970, -1.3463, 0.9011, -0.8704],
[ 1.5639, 0.7123, 0.0385, 1.8410]])
print(torch.argmax(a, dim=1))
tensor([1, 1, 0, 3])
Run Code Online (Sandbox Code Playgroud)
就我的假设而言,dim = 0 代表行,dim = 1 代表列。
在其API文档中,它显示"Computed rectified linear".
是Re(ctified)L(inear)......那么U是什么?
我用参数创建了自定义损失函数。
def w_categorical_crossentropy(weights):
def loss(y_true, y_pred):
print(weights)
print("----")
print(weights.shape)
final_mask = K.zeros_like(y_pred[:, 0])
y_pred_max = K.max(y_pred, axis=1)
y_pred_max = K.reshape(y_pred_max, (K.shape(y_pred)[0], 1))
y_pred_max_mat = K.cast(K.equal(y_pred, y_pred_max), K.floatx())
return K.categorical_crossentropy(y_pred, y_true)
return loss
Run Code Online (Sandbox Code Playgroud)
现在,我需要控制权重参数值,但打印功能无法正常工作。有没有办法打印权重值?
Have tensor like :x.shape = [3, 2, 2].
import torch
x = torch.tensor([
[[-0.3000, -0.2926],[-0.2705, -0.2632]],
[[-0.1821, -0.1747],[-0.1526, -0.1453]],
[[-0.0642, -0.0568],[-0.0347, -0.0274]]
])
Run Code Online (Sandbox Code Playgroud)
我需要.max()接管第二和第三维。我期待一些这样的[-0.2632, -0.1453, -0.0274]输出。我尝试使用: x.max(dim=(1,2)),但这会导致错误。
这似乎是 PyTorch 中 LSTM 最常见的问题之一,但我仍然无法弄清楚 PyTorch LSTM 的输入形状应该是什么。
即使遵循了几个帖子(1、2、3)并尝试了解决方案,它似乎也不起作用。
背景:我已经对一批大小为 12 的文本序列(可变长度)进行了编码,并且使用pad_packed_sequence功能对序列进行了填充和打包。MAX_LEN对于每个序列是 384,序列中的每个标记(或单词)的维度为 768。因此,我的批处理张量可能具有以下形状之一:[12, 384, 768]或[384, 12, 768]。
该批次将是我对 PyTorch rnn 模块(此处为 lstm)的输入。
根据用于PyTorch文档LSTMs,其输入尺寸是(seq_len, batch, input_size)我的理解如下。
seq_len- 每个输入流中的时间步数(特征向量长度)。
batch- 每批输入序列的大小。
input_size- 每个输入标记或时间步长的维度。
lstm = nn.LSTM(input_size=?, hidden_size=?, batch_first=True)
这里的确切值input_size和hidden_size值应该是什么?
我有两个形式为 [y11, y12] 和 [y21, y22] 的 Pytorch 张量。如何获得两个张量的加权平均值?
我有以下代码:
a = torch.randint(0,10,[3,3,3,3])
b = torch.LongTensor([1,1,1,1])
Run Code Online (Sandbox Code Playgroud)
我有一个多维索引,b并希望用它来选择一个单元格a.如果b不是张量,我可以这样做:
a[1,1,1,1]
Run Code Online (Sandbox Code Playgroud)
哪个返回正确的单元格,但是:
a[b]
Run Code Online (Sandbox Code Playgroud)
不起作用,因为它只选择了a[1]四次.
我怎样才能做到这一点?谢谢
我以第三种方式失败了.t3还在CPU上.不知道为什么.
a = np.random.randn(1, 1, 2, 3)
t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))
t2 = torch.tensor(a)
t2 = t2.cuda()
t3 = torch.tensor(a, device=torch.device('cuda'))
Run Code Online (Sandbox Code Playgroud)