-
Notifications
You must be signed in to change notification settings - Fork 5.5k
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
Add sequence_expand Operator based LoDTensor #4178
Comments
不是很理解上面的例子。paddle原来的expandLayer,一个是数据,一个是为了获得LoD信息。 假设Input(x)的输入是一维数值[4,6] 那么输出的LoD信息是[0,3,5] |
我大概理解 @wanghaoshuang 的意思: 比如这个case: Input(X) : 2 # 两条样本
1 2 # 第一条:1个time step, 第二条:2个time step
a b c Input(Y): 2 # 两条样本
2 4 #第一条:2个time step, 第二条:4个time step Out: 2 #输出两条样本
2 4 #和Input(Y)相同的LoD
a a b c b c # 第一条:1个time step扩展成2个time step,第二条:2个time step扩展4个time step 我觉得还可以,相比Paddle原先的 |
从理论上讲这种方式是可以的,要求Y的timestep个数要能整除X的timestep个数。 但是实际操作中是不现实的:如果X和Y都是LodTensor,那么训练的时候,time step完全是随机的。因为每条句子的词个数都不一样。那么,常常会出现最后一种情况。 |
那就是 @wanghaoshuang 的最后一个case,不合法输入,无法完成expand操作。 @wanghaoshuang 上述的实现增加一种你描述的case,也是Input(X)的LoD是空(operator里默认的输入都是LoDTensor),就可以吧。 |
是的,在这里Input(X)也可以是普通Tensor.
对于这个例子,可以这么认为:
Input(Y):
Out:
|
不能支持X和Y都是1维的LodTensor,因为训练的时候,不能说某些样本能过,某些样本过不了。样本的timestep个数都是不一样的,程序没法保证都能整除。 |
expand直观理解,就是把0维序列扩展成1维或者2维(含有subseq的序列),1维序列扩展成2维。 如果把1维序列扩展成1维,可以另外写一个op,指定timestep扩展几倍。因为把一个1维序列按照另一个1维序列进行扩展,很多样本都是过不了的。因此没有存在的意义。 |
@luotao1 也就是说上边第4、5 、6个例子是没有意义的,expand只用考虑低维转高维 ? |
|
目前LoDTensor是不感知序列是定长还是变长的,它认为序列都是变长的。 @wanghaoshuang 的case,是对同纬度的序列进行扩展。由于LoDTensor是认为序列都是变长的,这种情况,不能单靠文档解释,是直接程序就要报错。
程序中要有报错的机制,不然挂掉的地方可能不在expand op里面,到时将非常难以进行排查。 |
嗯,我感觉我们还是实现的灵活一些,先不考虑有没有意义,具体怎么用交给用户决定。 |
sequence_expand Op
Expand a LoDTensor by a reference LoDTensor.
example
Ginve input(X) as input to be expanded and input(Y) as reference input. Both input(X) and input(Y) are LoDTensor.
#1
Input(X) :
Input(Y):
Out:
#2
Input(X) :
Input(Y):
Out:
#3
Input(X) :
Input(Y):
Out:
#4
Input(X) :
Input(Y):
Out:
#5
Input(X) :
Input(Y):
Out:
#6
Input(X) :
Input(Y):
Out:
The text was updated successfully, but these errors were encountered: