Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

关于Trainer基本使用部分实例的报错 #285

Closed
jwc19890114 opened this issue Apr 17, 2020 · 6 comments
Closed

关于Trainer基本使用部分实例的报错 #285

jwc19890114 opened this issue Apr 17, 2020 · 6 comments

Comments

@jwc19890114
Copy link

在学习Trainer部分的时候,运行了这一节最开始部分的代码
但是原始的实例代码会报错

TypeError: can't convert np.ndarray of type numpy.int32. The only supported types are: float64, float32, float16, int64, int32, int16, int8, uint8, and bool.

我尝试在数据生成部分直接使用torch生成tensor

def generate_psedo_dataset(num_samples):
    data=torch.randint(2,size=(num_samples,10))
    print(data.shape)
    list=[]
    for n in range(num_samples):
        label=torch.sum(data[n])%2
        list.append(label)
    list=torch.stack(list)
    dataset = DataSet({'x':data, 'label': list})
    dataset.set_input('x')
    dataset.set_target('label')
    return dataset
tr_dataset=generate_psedo_dataset(1000)
dev_dataset=generate_psedo_dataset(100)

但是在训练中会报如下错误

TypeError: issubclass() arg 1 must be a class

是不是我的数据生成写错了。。。
gitbook部分的实例代码应该如何调整呢?
torch:1.2.0+cu92
FastNLP:0.5.0

@yhcc
Copy link
Member

yhcc commented Apr 19, 2020

image
似乎我这边可以直接运行,如果你还是无法run起来,建议通过一下方式重新安装一下, 先卸载现在的fastNLP,pip uninstall fastNLP, 然后通过pip install git+https://github.com/fastnlp/fastNLP安装最新版的fastNLP

@jwc19890114
Copy link
Author

image
似乎我这边可以直接运行,如果你还是无法run起来,建议通过一下方式重新安装一下, 先卸载现在的fastNLP,pip uninstall fastNLP, 然后通过pip install git+https://github.com/fastnlp/fastNLP安装最新版的fastNLP

好的,我试一下,谢谢啦

@jwc19890114
Copy link
Author

image
似乎我这边可以直接运行,如果你还是无法run起来,建议通过一下方式重新安装一下, 先卸载现在的fastNLP,pip uninstall fastNLP, 然后通过pip install git+https://github.com/fastnlp/fastNLP安装最新版的fastNLP

好的,我试一下,谢谢啦

额,刚把上面的图加载出来,我看了你的回复,就是说在运行了我的提问中那段代码后,生成的dataset导入model中是可以运行的是么

@yhcc
Copy link
Member

yhcc commented Apr 19, 2020

image如果直接train的话,会有一个问题是输入的x是LongTensor的,是没法直接做运算的, 所以用(把x转为Float类型的Tensor)

def generate_psedo_dataset(num_samples):
    data=torch.randint(2,size=(num_samples,10))
    print(data.shape)
    list=[]
    for n in range(num_samples):
        label=torch.sum(data[n])%2
        list.append(label)
    list=torch.stack(list)
    dataset = DataSet({'x':data.float(), 'label': list})
    dataset.set_input('x')
    dataset.set_target('label')
    return dataset
tr_dataset=generate_psedo_dataset(1000)
dev_dataset=generate_psedo_dataset(100)

我测试下来已经可以run了,但可能仍需要update一下你的fastNLP到github这个版本才行哈。

@jwc19890114
Copy link
Author

image如果直接train的话,会有一个问题是输入的x是LongTensor的,是没法直接做运算的, 所以用(把x转为Float类型的Tensor)

def generate_psedo_dataset(num_samples):
    data=torch.randint(2,size=(num_samples,10))
    print(data.shape)
    list=[]
    for n in range(num_samples):
        label=torch.sum(data[n])%2
        list.append(label)
    list=torch.stack(list)
    dataset = DataSet({'x':data.float(), 'label': list})
    dataset.set_input('x')
    dataset.set_target('label')
    return dataset
tr_dataset=generate_psedo_dataset(1000)
dev_dataset=generate_psedo_dataset(100)

我测试下来已经可以run了,但可能仍需要update一下你的fastNLP到github这个版本才行哈。

额,我卸载了原有版本,但是好像pip install的话仍然是0.5.0这个版本,请问这个版本是最新的吗?
重新安装之后,使用你上面提供的这段代码生成dataset仍然会报错
image

@jwc19890114
Copy link
Author

image如果直接train的话,会有一个问题是输入的x是LongTensor的,是没法直接做运算的, 所以用(把x转为Float类型的Tensor)

def generate_psedo_dataset(num_samples):
    data=torch.randint(2,size=(num_samples,10))
    print(data.shape)
    list=[]
    for n in range(num_samples):
        label=torch.sum(data[n])%2
        list.append(label)
    list=torch.stack(list)
    dataset = DataSet({'x':data.float(), 'label': list})
    dataset.set_input('x')
    dataset.set_target('label')
    return dataset
tr_dataset=generate_psedo_dataset(1000)
dev_dataset=generate_psedo_dataset(100)

我测试下来已经可以run了,但可能仍需要update一下你的fastNLP到github这个版本才行哈。

啊,搞定了,用pycharm调试了,发现问题在label那边,教程里面的label需要指定类型为int,否则会被认定为intc。

def generate_psedo_dataset(num_samples):
    data = np.random.randint(2, size=(num_samples, 10))
    label = np.sum(data, axis=1)%2
    dataset = DataSet({'x':data.astype(float), 'label': label.astype(int)})
    dataset.set_input('x')
    dataset.set_target('label')
    return dataset

谢谢啦

@yhcc yhcc closed this as completed Apr 20, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants