Python pytorch训练循环以“int”结束,对象没有属性“size”异常

Python pytorch训练循环以“int”结束,对象没有属性“size”异常,python,pytorch,Python,Pytorch,我在下面发布的代码只是应用程序的一小部分: def train(self, training_reviews, training_labels): # make sure out we have a matching number of reviews and labels assert(len(training_reviews) == len(training_labels)) # Keep track of

我在下面发布的代码只是应用程序的一小部分:

def train(self, training_reviews, training_labels):
        
        # make sure out we have a matching number of reviews and labels
        assert(len(training_reviews) == len(training_labels))
        
        # Keep track of correct predictions to display accuracy during training 
        correct_so_far = 0
        
        # Remember when we started for printing time statistics
        start = time.time()
        
        
        criterion = nn.CrossEntropyLoss()
        optimizer =  torch.optim.SGD(self.parameters(), lr=self.learning_rate)

        # loop through all the given reviews and run a forward and backward pass,
        # updating weights for every item
        for i in range(len(training_reviews)):
            
            # TODO: Get the next review and its correct label
            review = training_reviews[i]
            label = training_labels[i]
            print('processing item ',i)
            self.update_input_layer(review)
            output = self.forward(torch.from_numpy(self.layer_0).float()) 
            target = self.get_target_for_label(label)
            print('output ',output)
            print('target ',target)
            loss = criterion(output, target)

...
mlp = SentimentNetwork(reviews[:-1000],labels[:-1000], learning_rate=0.1)
mlp.train(reviews[:-1000],labels[:-1000])

在评估时,它以标题行中的异常结束:

loss = criterion(output, target)
在此之前,变量如下:

output  tensor([[0.5803]], grad_fn=<SigmoidBackward>)
target  1
目标应该是火炬。张量变量。使用torch.tensor[目标]

此外,您可能希望使用批处理,以便有N个样本和torch的形状。目标的张量为N,,相同


另请参阅关于PyTorch的内容,因为您没有使用批处理、没有运行optimizer或没有使用torch.utils.data.Dataset和torch.utils.data.DataLoader,这可能是您应该使用的。

谢谢您的回答。此代码不是为pytorch设计的,也不是为使用批处理而设计的。所以我的是一些实验,我认为如果训练循环一次扫描一个变量,也可以使用pytorch,这是一个有效的假设吗?顺便说一句,我修复了之前报告的问题,但现在我击中了下一个目标1在同一指令下超出范围。@josephpareti当然可以,但如果你想训练,你可能应该改变重量。不知道,我看不到您的标准。我指定了Criteria=nn.CrossEntropyLoss,但我不确定这是否正确,因为我只有一个值范围为0到1的类。您应该使用torch.nn.MSELoss,并且网络输出应该使用sigmoid作为激活。