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

训练word2vec词向量文本分类模型时报Expected float64错误如何解决

错误原因
  • 核心错误是自定义tf.keras.Model子类时错误使用Input层:tf.keras.Model子类的实现逻辑中,call方法会直接接收外部传入的输入张量,不需要在类内部定义Input层,Input层是Keras函数式API的专属写法。你在call中执行x = self.inpu(x)时,相当于把训练数据text_train强行传入Input层做参数校验,触发了类型不匹配错误。
  • 次要问题是Input层参数格式不规范:你定义Input层时写的shape=100不符合要求,shape参数需要传入元组,单维度输入应写为shape=(100,)。
  • 额外潜在问题:你提到输入是word2vec处理好的词向量,但Embedding层的作用是把整数索引映射为词向量,若你传入的text_train已经是浮点型的词向量张量,不需要再走Embedding层,也会导致类型/维度不匹配。
解决方法

根据你的输入数据类型选择对应修改方案:

场景1:text_train是词的整数索引(需要走Embedding层映射为词向量)

修改模型代码,删除内部的Input层定义,调整后代码如下:

class TextNet(tf.keras.Model):
    def __init__(self, vocab_dim, n_symbols, embedding_weights, input_length):
        super(TextNet, self).__init__()
        self.embedding = Embedding(output_dim=vocab_dim, input_dim=n_symbols, mask_zero=True,
                                   weights=[embedding_weights],
                                   input_length=input_length, trainable=False)
        self.lstm = LSTM(64, activation='relu')
        self.dropout1 = Dropout(0.2)
        self.dense = Dense(512, activation='relu')
        self.dropout2 = Dropout(0.2)
        self.dense1 = Dense(38, activation='softmax')

    def call(self, x, **kwargs):
        x = self.embedding(x)
        x = self.lstm(x)
        x = self.dropout1(x)
        x = self.dense(x)
        x = self.dropout2(x)
        x = self.dense1(x)
        return x

修改完成后检查text_train:确保是整数类型的张量/数组,每个元素对应词表的索引值,最大值不超过n_symbols-1,shape为(样本数, input_length)。

场景2:text_train已经是word2vec处理好的浮点型词向量

直接删除Embedding层,不需要做索引到向量的映射,调整代码如下:

class TextNet(tf.keras.Model):
    def __init__(self, vocab_dim, input_length):
        super(TextNet, self).__init__()
        self.lstm = LSTM(64, activation='relu')
        self.dropout1 = Dropout(0.2)
        self.dense = Dense(512, activation='relu')
        self.dropout2 = Dropout(0.2)
        self.dense1 = Dense(38, activation='softmax')

    def call(self, x, **kwargs):
        x = self.lstm(x)
        x = self.dropout1(x)
        x = self.dense(x)
        x = self.dropout2(x)
        x = self.dense1(x)
        return x

实例化模型时不需要再传入n_symbols、embedding_weights两个参数,同时确认text_train的shape为(样本数, input_length, vocab_dim),类型为浮点型。

内容的提问来源于stack exchange,提问作者hongjie zhang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:45:05