首页 > 解决方案 > ValueError:logits 和标签必须具有相同的形状((无,1)与())

问题描述

我得到一个 ValueError: logits and labels must have the same shape ((None, 1) vs ()) 在进行模型评估时。我让模型训练,但是当我评估时,我遇到了问题。我使用 tf.expand_dims 进行 logits,但想知道这是否也需要应用于标签?

下面是我的代码。


import tensorflow as tf
import tensorflow_datasets as tfds
dataset, info = tfds.load('imdb_reviews', with_info=True,
                          as_supervised=True)
train_dataset, test_dataset = dataset['train'], dataset['test']
BUFFER_SIZE = 10000
BATCH_SIZE = 64
train_dataset = train_dataset.shuffle(BUFFER_SIZE).batch(BATCH_SIZE).prefetch(1)
VOCAB_SIZE, EMBED_SIZE, NUM_OOV_BUCKETS = 10000, 128, 1000
encoder = tf.keras.layers.experimental.preprocessing.TextVectorization(
    max_tokens=VOCAB_SIZE)
encoder.adapt(train_dataset.map(lambda text, label: text))
class AttentionLayer(tf.keras.layers.Layer):

    def __init__(self, **kwargs):

        super(AttentionLayer, self).__init__(**kwargs)

        self.query_layer = tf.keras.layers.Conv1D(
            filters=100,
            kernel_size=4,
            padding='same'
        )

        self.value_layer = tf.keras.layers.Conv1D(
            filters=100,
            kernel_size=4,
            padding='same'
        )

        self.attention_layer = tf.keras.layers.Attention()
    
    def call(self, inputs):

        query = self.query_layer(inputs)
        value = self.value_layer(inputs)

        attention = self.attention_layer([query, value])

        return tf.keras.layers.concatenate([query, attention])

attention_layer = AttentionLayer()

model1 = tf.keras.models.Sequential([
    tf.keras.Input(shape=(),batch_size=1, dtype=tf.string, name='InputLayer'),
    encoder,
    tf.keras.layers.Embedding(VOCAB_SIZE + NUM_OOV_BUCKETS, EMBED_SIZE, mask_zero=True, name='Embedding_Layer'),
    attention_layer,
    tf.keras.layers.Conv1D(filters=32, kernel_size=4, padding = 'same', activation = 'relu', name='Conv1DLayer'),
    tf.keras.layers.MaxPooling1D(pool_size=2, name='MaxPoolLayer'),
    tf.keras.layers.LSTM(64, dropout = 0.2, name='DropoutLayer'),
    tf.keras.layers.Dense(250, activation = 'relu', name='DenseLayer'),
    tf.keras.layers.Dense(1, activation='sigmoid', name='Output_Layer')
])
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"])
def preprocess_y(x, y):
    return x, tf.expand_dims(y, -1)
history1 = model1.fit(
    train_dataset.map(preprocess_y),
    batch_size=BATCH_SIZE,
    epochs=1)
model1.evaluate(test_dataset)

ValueError:logits 和标签必须具有相同的形状((无,1)与())

标签: pythontensorflownlplstmvalueerror

解决方案


推荐阅读