InvalidArgumentError:图形执行错误:收到标签值 83193,超出 [0, 128) 的有效范围

问题描述 投票:0回答:1

我尝试构建一个模型(用于简单的聊天机器人),但我停留在嵌入层上。 我有 X_train 形状 = (100082, 1307) --> 问题 y_train 形状 = (100082, 1307) --> 答案 其中 1307 是我填充序列的最大长度

下面是我的代码:

model = Sequential([
    Embedding(total_tokens, 128, input_length=max_seq_length),
    # Bidirectional(LSTM(150)),
    # Dense(total_tokens, activation='softmax')
])
model.summary()

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(X_train, y_train, epochs=50)

但是,当我训练模型时,出现了如下错误: 收到标签值 83193,超出了 [0, 128) 的有效范围。

我该如何解决这个问题?

tensorflow machine-learning embedding
1个回答
0
投票

问题是由于您的标签

y_train
包含大于指定间隔
[0, 128)
的整数,因为您的
Embedding
层的输出大小设置为
128

让我们用一个简化的例子来说明这一点。这里我将形状从

(100082, 1307)
缩小到
(1000, 1307)
:

我们使用随机生成器来创建

y_train
张量,如下所示:

y_train = tf.random.uniform(shape=([1000, 1307]), minval=0, maxval=127)

这里我们测试 10 个 epoch:

model = Sequential([
    Embedding(total_tokens, 128, input_length=max_seq_length),
])
model.summary()
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-4),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
model.fit(X_train, y_train, epochs=10)

这是输出:

Model: "sequential_1"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 embedding_1 (Embedding)     (None, 1307, 128)         128000    
                                                                 
=================================================================
Total params: 128000 (500.00 KB)
Trainable params: 128000 (500.00 KB)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________
Epoch 1/10
32/32 [==============================] - 4s 124ms/step - loss: 10.5185 - accuracy: 0.0000e+00
Epoch 2/10
32/32 [==============================] - 5s 152ms/step - loss: 10.4612 - accuracy: 0.0000e+00
Epoch 3/10
32/32 [==============================] - 4s 116ms/step - loss: 10.4123 - accuracy: 0.0000e+00
Epoch 4/10
32/32 [==============================] - 4s 116ms/step - loss: 10.3636 - accuracy: 0.0000e+00
Epoch 5/10
32/32 [==============================] - 6s 175ms/step - loss: 10.3126 - accuracy: 0.0000e+00
Epoch 6/10
32/32 [==============================] - 4s 120ms/step - loss: 10.2577 - accuracy: 0.0000e+00
Epoch 7/10
32/32 [==============================] - 4s 119ms/step - loss: 10.1967 - accuracy: 0.0000e+00
Epoch 8/10
32/32 [==============================] - 5s 152ms/step - loss: 10.1267 - accuracy: 0.0000e+00
Epoch 9/10
32/32 [==============================] - 4s 119ms/step - loss: 10.0431 - accuracy: 0.0000e+00
Epoch 10/10
32/32 [==============================] - 4s 119ms/step - loss: 9.9369 - accuracy: 7.6511e-07
<keras.src.callbacks.History at 0x7de0b88f0ee0>

在此示例中,模型运行没有错误。

但是,如果生成器的上限设置为

200
(大于128):

y_train = tf.random.uniform(shape=([1000, 1307]), minval=0, maxval=200)

出现错误:

Received a label value of 199 which is outside the valid range of [0, 128).

因此,您应该确保

y_train
中的标签落在
Embedding
层的输出大小指定的有效范围内。

© www.soinside.com 2019 - 2024. All rights reserved.