微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AttributeError: 模块 'utils' 没有属性 'read'

如何解决AttributeError: 模块 'utils' 没有属性 'read'

我正在尝试使用 PyTorch 训练模型,但出现此错误 AttributeError: module 'utils' has no attribute 'read'

在主项目中,我有文件 utils.pyx,而且我在此特定行中遇到错误 for i,data in enumerate(trainloader):

这是有问题的代码(如果您对此问题有任何想法,请告诉我谢谢)

import os
import copy
import torch
import torch.nn as nn
import torch.optim as optim
import torch.utils.data
import numpy as np
import matplotlib.pyplot as plt
#from dataset import NTUSkeletonDataset
from torch.utils.data import Dataset,DataLoader
#import GAN
from torch.autograd import Variable
import matplotlib.pyplot as plt
import time

# Root directory for dataset
daTaroot = "Data/nturgb+d_skeletons"

# Batch size during training
batch_size = 5

# Size of z latent vector (i.e. size of generator input)
latent_dim = 20

# Number of training epochs
num_epochs = 200

# Learning rate for optimizers
lrG = 0.00005
lrD = 0.00005

clip_value = 0.01
n_critic = 20

trainset = NTUSkeletonDataset(root_dir=daTaroot,pinpoint=10)
trainloader = DataLoader(trainset,batch_size=batch_size,shuffle=True,num_workers=4)

cuda = torch.cuda.is_available()
device = torch.device("cuda:0" if cuda else "cpu")
Tensor = torch.cuda.FloatTensor if cuda else torch.FloatTensor

generator = Gen0(latent_dim).to(device)
discriminator = dis0().to(device)

optimizer_G = torch.optim.RMSprop(generator.parameters(),lr=lrG)
optimizer_D = torch.optim.RMSprop(discriminator.parameters(),lr=lrD)

epoch_loss = np.zeros((num_epochs,3,len(trainloader)//n_critic+1))

for epoch in range(num_epochs):
    j = 0
    print("Boucle 1")
    epoch_start = time.time()
    for i,data in enumerate(trainloader):
        print("something")
        size = (-1,data.size(-1))
        data = data.reshape(size)
        print
        optimizer_D.zero_grad()

        real_skeleton = Variable(data.type(Tensor)).to(device)

        critic_real = -torch.mean(discriminator(real_skeleton))
        # critic_real.backward()

        # sample noise as generator input
        z = torch.randn(real_skeleton.size(0),latent_dim).to(device)

        # Generate a batch of fake skeleton
        fake_skeleton = generator(z).detach()

        critic_fake = torch.mean(discriminator(fake_skeleton))
        # critic_fake.backward()

        loss_D = critic_real + critic_fake
        loss_D.backward()

        optimizer_D.step()

        # clip weights of discriminator
        for p in discriminator.parameters():
            p.data.clamp_(-clip_value,clip_value)

        # Train the generator every n_critic iterations:
        if i % n_critic == n_critic - 1:
            optimizer_G.zero_grad()

            # Generate a batch of
            gen_skeleton = generator(z)
            # adversarial loss
            loss_G = -torch.mean(discriminator(gen_skeleton))

            loss_G.backward()
            optimizer_G.step()

            for k,l in enumerate((loss_G,critic_real,critic_fake)):
                epoch_loss[epoch,k,j] = l.item()
            j += 1

    epoch_end = time.time()
    print('[%d] time eplased: %.3f' % (epoch,epoch_end-epoch_start))
    for k,l in enumerate(('G','critic real','critic fake')):
        print('\t',l,epoch_loss[epoch,k].mean(axis=-1))

    if epoch % 20 == 19:
        m = copy.deepcopy(generator.state_dict())
        torch.save(m,'gen0_%d.pt' % epoch)

np.save('gen0_epoch_loss.npy',epoch_loss)

完整的错误是:

enter image description here

utils.pyx

#cython: language_level=3
import numpy as np
cimport numpy as np
import os
cimport cython

def read(fname,max_bodies=2):
    with open(fname,'r') as f:
        num_frames = int(f.readline())
        keypoints = np.zeros((2,num_frames,25,2),dtype=np.float64)

        for t in range(num_frames):
            num_bodies = int(f.readline())

            for m in range(num_bodies):
                f.readline() # Body info,skip
                num_keypoints = int(f.readline())
                for k in range(num_keypoints): # Read joints
                    x,y = f.readline().split()[:2]
                    if m >= max_bodies:
                        continue

                    keypoints[m,t,0] = x
                    keypoints[m,1] = y
    return keypoints


@cython.boundscheck(False)
@cython.wraparound(False)
@cython.initializedcheck(False)
@cython.cdivision(True)
cpdef void ins_frames(double[:,:,::1] buf,double[:,::1] data,int diff):
    cdef int n0 = data.shape[1]
    cdef int i = 0
    cdef int j = 0
    cdef int k = 0
    cdef int l = 0
    cdef double v = 0
    cdef int count = 0

    indices = np.linspace(1,n0,num=diff,endpoint=False,dtype=np.int32) \
              + np.arange(diff,dtype=np.int32)
    cdef np.ndarray[np.int32_t,ndim=1] to_ins = indices

    for i in range(to_ins.shape[0]):
        buf[0,to_ins[i],0] = -10000001 # Marker

    recur = 0

    for i in range(buf.shape[1]):
        if buf[0,i,0] == -10000001:
            recur += 1
            continue

        for j in range(2):
            for k in range(25):
                for l in range(2):
                    v = data[j,count,l]
                    buf[j,l] = v # copy
                    if recur != 0: # Calculate the mean
                        buf[j,i-1,l] = (v + data[j,count-1,l]) * 0.5

        if recur > 0: recur -= 1 # Reset

        count += 1

为了更好地了解整个代码,您可以在此处找到我的 notebook。以及 dataset

解决方法

当我做了 pip install utils 并尝试:

>> import utils
>> utils.read()

我得到了 AttributeError: module 'utils' has no attribute 'read'。我认为您的代码也发生了同样的事情。

尝试重命名您的 utils.pyx(例如 myutils.pyx)并更改:

f = utils.read(...)

到:

f = myutils.read(...)

别忘了先导入。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。