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

Flask部署NLP项目遇TypeError:str与int无法执行<=比较

问题分析

错误核心是**vocabSize变量类型不匹配**:Embedding层初始化时,input_dim参数(即传入的vocabSize)为字符串类型,无法和整数0做大小比较,触发TypeError。

解决步骤

1. 修正全局变量声明

processing()函数中计算的vocabSize、embedding_matrix等变量是局部变量,未被全局共享,导致build_model()无法获取到正确的数值。需要在processing()开头补充全局变量声明:

@app.route("/preprocessing")
def processing():
    # 新增需要全局共享的变量声明
    global df,cv,x_train,x_test,y_train,y_test, vocabSize, embedding_matrix, tokenizer
    # 原有预处理代码保持不变...

2. 确保vocabSize为整数类型

显式将vocabSize转换为整数(避免潜在的类型隐式转换问题):

vocabSize = int(len(tokenizer.index_word) + 1)

3. 修正build_model()的参数依赖

  • input_length直接使用预处理时固定的48(和pad_sequences的maxlen保持一致,避免依赖x_train的长度)
  • 确保embedding_matrix已通过全局变量传递:
def build_model(): 
    model = Sequential()
    # 替换input_length为固定值48,与预处理逻辑对齐
    model.add(Embedding(vocabSize, 200, input_length=48, weights=[embedding_matrix], trainable=False))
    model.add(LSTM(256, dropout=0.2,recurrent_dropout=0.2, return_sequences=True))
    model.add(LSTM(128, dropout=0.2,recurrent_dropout=0.2))
    model.add(Dense(3, activation='softmax'))
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])    
    return model

4. 严格遵循执行顺序

必须先访问/preprocessing接口完成数据预处理,确保所有全局变量被正确赋值后,再访问/train接口。直接访问/train会因变量未初始化触发新错误。

额外优化建议

  • 减少全局变量使用:可以用Flask的g对象或自定义类存储预处理结果,比全局变量更安全
  • 增加错误捕获:在train()中添加异常处理,返回可读的错误信息:
@app.route("/train")
def train():
    global model,x_train,y_train,x_test,y_test
    try:
        model=build_model()
        model.fit(x_train,
                    y_train,
                    validation_data=(x_test, y_test),
                    verbose=1,
                    batch_size=64,
                    epochs=10)  
        data = {'page':'train page','message':'ok'}
        return jsonify(data)
    except Exception as e:
        return jsonify({'page':'train page','message':str(e)}), 500

内容的提问来源于stack exchange,提问作者Ahmed Adel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 08:20:32