r_x = (image_a.size[0] - image_a.size[0]%windowSize)/ windowSize TypeError: 'int' object is not subscriptable,其中image_a是list形式
时间: 2024-03-27 13:36:18 浏览: 33
根据错误信息来看,`image_a` 是一个列表,而列表没有 `size` 属性,因此会报错。如果您要获取列表的长度,可以使用 `len()` 函数,如下所示:
```
r_x = (len(image_a) - len(image_a) % windowSize) / windowSize
```
另外,因为上面的计算结果可能是浮点数,如果需要得到整数结果,可以使用 `int()` 函数进行强制类型转换,如下所示:
```
r_x = int((len(image_a) - len(image_a) % windowSize) / windowSize)
```
希望这个解答能够帮到您!
相关问题
Uncaught runtime errors: × ERROR cornerstone_wado_image_loader__WEBPACK_IMPORTED_MODULE_2___default(...).init is not a function TypeError: cornerstone_wado_image_loader__WEBPACK_IMPORTED_MODULE_2___default(...).init is not a function at Proxy.initCornerstone (webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ThreeViewDisplay.vue?vue&type=script&lang=js:22:82) at Proxy.mounted (webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/components/ThreeViewDisplay.vue?vue&type=script&lang=js:16:10) at eval (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:2525:86) at callWithErrorHandling (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:285:18) at callWithAsyncErrorHandling (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:293:17) at hook.__weh.hook.__weh (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:2507:19) at flushPostFlushCbs (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:438:41) at flushJobs (webpack-internal:///./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:474:5) 这是什么问题,我需要怎么解决
这个错误表明在你的代码中,调用了一个名为`init`的函数,但是它并不存在于`cornerstone_wado_image_loader`模块中。这可能是由于以下原因导致的问题:
1. `cornerstone_wado_image_loader`模块没有正确加载或安装。请确保你已经正确安装了这个模块,并且路径正确。
2. 你可能使用了一个过时的版本的`cornerstone_wado_image_loader`模块,其中没有`init`函数。你可以尝试更新模块到最新版本,或者查看文档以了解是否有其他方式来初始化该模块。
3. 可能是你在调用`init`函数时使用了错误的语法或参数。请仔细检查你的代码,确保正确调用了该函数,并且传递了正确的参数。
解决这个问题的最佳方法是查阅`cornerstone_wado_image_loader`模块的文档,确保你正确地使用了该模块的初始化函数。如果问题仍然存在,你可以尝试搜索类似的错误信息来找到其他人遇到类似问题的解决方案,或者向相关社区或论坛寻求帮助。
def calc_gradient_penalty(self, netD, real_data, fake_data): alpha = torch.rand(1, 1) alpha = alpha.expand(real_data.size()) alpha = alpha.cuda() interpolates = alpha * real_data + ((1 - alpha) * fake_data) interpolates = interpolates.cuda() interpolates = Variable(interpolates, requires_grad=True) disc_interpolates, s = netD.forward(interpolates) s = torch.autograd.Variable(torch.tensor(0.0), requires_grad=True).cuda() gradients1 = autograd.grad(outputs=disc_interpolates, inputs=interpolates, grad_outputs=torch.ones(disc_interpolates.size()).cuda(), create_graph=True, retain_graph=True, only_inputs=True, allow_unused=True)[0] gradients2 = autograd.grad(outputs=s, inputs=interpolates, grad_outputs=torch.ones(s.size()).cuda(), create_graph=True, retain_graph=True, only_inputs=True, allow_unused=True)[0] if gradients2 is None: return None gradient_penalty = (((gradients1.norm(2, dim=1) - 1) ** 2).mean() * self.LAMBDA) + \ (((gradients2.norm(2, dim=1) - 1) ** 2).mean() * self.LAMBDA) return gradient_penalty def get_loss(self, net,fakeB, realB): self.D_fake, x = net.forward(fakeB.detach()) self.D_fake = self.D_fake.mean() self.D_fake = (self.D_fake + x).mean() # Real self.D_real, x = net.forward(realB) self.D_real = (self.D_real+x).mean() # Combined loss self.loss_D = self.D_fake - self.D_real gradient_penalty = self.calc_gradient_penalty(net, realB.data, fakeB.data) return self.loss_D + gradient_penalty,return self.loss_D + gradient_penalty出现错误:TypeError: unsupported operand type(s) for +: 'Tensor' and 'NoneType'
这个错误是因为在 calc_gradient_penalty 函数中,如果 gradients2 是 None,则会返回 None。在 get_loss 函数中,如果 gradient_penalty 是 None,则返回的就是 self.loss_D + None,这导致了 TypeError 错误。
为了解决这个问题,你可以在 calc_gradient_penalty 函数中添加一个条件判断,如果 gradients2 是 None,则返回 0.0,而不是 None。这样,当计算 gradient_penalty 时,即使 gradients2 是 None,也不会导致错误。修改后的代码如下:
```
def calc_gradient_penalty(self, netD, real_data, fake_data):
alpha = torch.rand(1, 1)
alpha = alpha.expand(real_data.size())
alpha = alpha.cuda()
interpolates = alpha * real_data + ((1 - alpha) * fake_data)
interpolates = interpolates.cuda()
interpolates = Variable(interpolates, requires_grad=True)
disc_interpolates, s = netD.forward(interpolates)
s = torch.autograd.Variable(torch.tensor(0.0), requires_grad=True).cuda()
gradients1 = autograd.grad(outputs=disc_interpolates, inputs=interpolates,
grad_outputs=torch.ones(disc_interpolates.size()).cuda(),
create_graph=True, retain_graph=True, only_inputs=True, allow_unused=True)[0]
gradients2 = autograd.grad(outputs=s, inputs=interpolates,
grad_outputs=torch.ones(s.size()).cuda(),
create_graph=True, retain_graph=True,
only_inputs=True, allow_unused=True)[0]
if gradients2 is None:
return 0.0
gradient_penalty = (((gradients1.norm(2, dim=1) - 1) ** 2).mean() * self.LAMBDA) + \
(((gradients2.norm(2, dim=1) - 1) ** 2).mean() * self.LAMBDA)
return gradient_penalty
def get_loss(self, net,fakeB, realB):
self.D_fake, x = net.forward(fakeB.detach())
self.D_fake = self.D_fake.mean()
self.D_fake = (self.D_fake + x).mean()
# Real
self.D_real, x = net.forward(realB)
self.D_real = (self.D_real+x).mean()
# Combined loss
self.loss_D = self.D_fake - self.D_real
gradient_penalty = self.calc_gradient_penalty(net, realB.data, fakeB.data)
if gradient_penalty == None:
gradient_penalty = 0.0
return self.loss_D + gradient_penalty
```