fastnlp / fastNLP

fastNLP: A Modularized and Extensible NLP Framework. Currently still in incubation.
https://gitee.com/fastnlp/fastNLP
Apache License 2.0
3.06k stars 450 forks source link

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

Closed jwc19890114 closed 4 years ago

jwc19890114 commented 4 years ago

在学习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 commented 4 years ago

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

jwc19890114 commented 4 years ago

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

好的,我试一下,谢谢啦

jwc19890114 commented 4 years ago

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

好的,我试一下,谢谢啦

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

yhcc commented 4 years ago

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 commented 4 years ago

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 commented 4 years ago

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

谢谢啦