ValueError:登录项和标签必须具有相同的形状((无,1)vs())

2024-09-27 19:22:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到一个ValueError:在进行模型求值时,logits和label必须具有相同的形状((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:登录项和标签必须具有相同的形状((无,1)vs())


Tags: nameselflayertruesizevaluelayerstf

热门问题