You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:return后变量尺寸变化,np.vstack致Word2Vec文本分类输入维度异常

问题根源

  1. np.vstack的作用是沿垂直方向(行方向)堆叠数组,你的每个样本经过padding后是(250, 250)的二维数组(250个词,每个词250维embedding),6个样本用np.vstack堆叠后会变成(6*250, 250) = (1500, 250)的数组,自然len(train_X)就是1500,和Y的长度不匹配。你需要的是沿新的样本维度堆叠,保留每个样本的二维结构,应该用np.stack而不是np.vstack。
  2. 长文本截断的代码逻辑失效:你写的enc_essay[:249]没有赋值回变量,相当于截断操作根本没有执行,实际运行时长文本不会被截断。
  3. 截断长度写错了:你要保留前250个词,应该取enc_essay[:250]而不是[:249]。

修复代码

1. 修复padding和截断逻辑

def get_padded_encoded_essays(encoded_essays):
    """
    for short essays, we prepend zero padding so all input to RNN has same length,
    for long essays, we truncate it to the first 250 words
    """
    padded_essays_encoding = []
    for enc_essay in encoded_essays:
        # 先转成numpy数组避免tensor操作兼容问题
        enc_essay = np.array(enc_essay)
        if get_word_count(enc_essay) > 250:
            # 修复:截断后赋值回变量,取前250个词
            enc_essay = enc_essay[:250]
        
        else:
            zero_padding_cnt = 250 - enc_essay.shape[0]
            pad = np.zeros((zero_padding_cnt, 250))
            # 优化:不用循环拼接,一次性生成对应长度的padding直接拼接,效率更高
            enc_essay = np.concatenate((pad, enc_essay), axis=0)
        padded_essays_encoding.append(enc_essay)
    return padded_essays_encoding

2. 修复preprocess里的数组堆叠逻辑

def preprocess(df):
    """
    encode text value to numeric value
    """
 
    # encode words into word2vec
    essays = df['corrected'].tolist()
    print("essay length:" + str(len(essays)))

    
    encoded_essays = get_word2vec_enc(essays)
    padded_encoded_essays = get_padded_encoded_essays(encoded_essays)
    print("padded_encoded_essays length:" + str(len(padded_encoded_essays)))
    
    # encoded ses
    sess = df['father'].tolist()

    encoded_ses = [ses_encode(ses) for ses in sess]
    # 修复:用np.stack沿样本维度堆叠,输出shape为(样本数, 250, 250)
    X = np.stack(padded_encoded_essays, axis=0)
    print("X length:" + str(len(X)))
    Y = np.vstack(encoded_ses)

    return X, Y

修复后效果

运行后train_X的shape为(6, 250, 250),len(train_X)返回6,和train_Y长度完全匹配,同时是合法的多维数组,可以直接转换为张量输入RNN模型,不会出现转换报错。

内容的提问来源于stack exchange,提问作者karyn-h

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:00:00