简体   繁体   English

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

[英]AttributeError: module 'utils' has no attribute 'read'

I'm trying to train a model using PyTorch and I got this error AttributeError: module 'utils' has no attribute 'read'我正在尝试使用 PyTorch 训练模型,但出现此错误AttributeError: module 'utils' has no attribute 'read'

In the main project I have the file utils.pyx and also I'm getting an error in this particular line for i, data in enumerate(trainloader):在主项目中,我有文件 utils.pyx 并且我在这个特定的行中收到错误for i, data in enumerate(trainloader):

Here is the code with the problem (if you have any idea about this issue just let me know Thank you)这是有问题的代码(如果您对此问题有任何想法,请告诉我谢谢)

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)

The full error is :完整的错误是:

在此处输入图片说明

The utils.pyx 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, k, 0] = x
                    keypoints[m, t, k, 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, 0] = -10000001 # Marker

    recur = 0

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

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

        if recur > 0: recur -= 1 # Reset

        count += 1

To get a better idea about the whole code, here you can find my notebook .为了更好地了解整个代码,您可以在这里找到我的notebook As well as the dataset .以及数据集

When I did pip install utils and tried:当我做pip install utils并尝试时:

>> import utils
>> utils.read()

I got AttributeError: module 'utils' has no attribute 'read' .我得到AttributeError: module 'utils' has no attribute 'read' I think the same thing is happening to your code.我认为你的代码也发生了同样的事情。

Try to rename your utils.pyx (eg myutils.pyx ) and change:尝试重命名您的utils.pyx (例如myutils.pyx )并更改:

f = utils.read(...)

to:至:

f = myutils.read(...)

Don't forget to import it first.不要忘记先导入它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AttributeError:模块“networkx”没有属性“utils” - AttributeError: module 'networkx' has no attribute 'utils' AttributeError:模块“keras.utils”没有属性“get_file” - AttributeError: module 'keras.utils' has no attribute 'get_file' AttributeError:模块“keras.utils”没有属性“to_categorical” - AttributeError: module 'keras.utils' has no attribute 'to_categorical' AttributeError: 模块“gensim.utils”没有属性“smart_open” - AttributeError: module 'gensim.utils' has no attribute 'smart_open' AttributeError: 模块 'keras.utils' 没有属性 'Sequence' - AttributeError: module 'keras.utils' has no attribute 'Sequence' AttributeError: 模块“utils”没有属性“load_data” - AttributeError: module 'utils' has no attribute 'load_data' AttributeError:模块“torch.utils”没有属性“数据” - AttributeError: module 'torch.utils' has no attribute 'data' AttributeError: 模块 'torch.utils' 没有属性 'tensorboard' - AttributeError: module 'torch.utils' has no attribute 'tensorboard' AttributeError:模块“keras.utils.generic_utils”没有属性“populate_dict_with_module_objects” - AttributeError: module 'keras.utils.generic_utils' has no attribute 'populate_dict_with_module_objects' AttributeError:模块'tensorflow.python.keras.utils.generic_utils'没有属性'populate_dict_with_module_objects' - AttributeError: module 'tensorflow.python.keras.utils.generic_utils' has no attribute 'populate_dict_with_module_objects'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM