简体   繁体   English

使用嵌入层创建了 Keras 深度学习 model 但在训练时返回错误

[英]Created a Keras deep learning model using Embedding layer but returned an error while training

I've created a Keras Deep learning model using the Embedding layer for sentiment analysis.我创建了一个 Keras 深度学习 model 使用嵌入层进行情绪分析。 However, as I start training the model, it returned this error and I couldn't figure it out.但是,当我开始训练 model 时,它返回了这个错误,我无法弄清楚。

The Error:错误:

/opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
        return step_function(self, iterator)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:795 step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:1259 run
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:2730 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/distribute/distribute_lib.py:3417 _call_for_each_replica
        return fn(*args, **kwargs)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:788 run_step  **
        outputs = model.train_step(data)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py:755 train_step
        loss = self.compiled_loss(
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/engine/compile_utils.py:203 __call__
        loss_value = loss_obj(y_t, y_p, sample_weight=sw)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/losses.py:152 __call__
        losses = call_fn(y_true, y_pred)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/losses.py:256 call  **
        return ag_fn(y_true, y_pred, **self._fn_kwargs)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/losses.py:1537 categorical_crossentropy
        return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/util/dispatch.py:201 wrapper
        return target(*args, **kwargs)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/keras/backend.py:4833 categorical_crossentropy
        target.shape.assert_is_compatible_with(output.shape)
    /opt/anaconda3/lib/python3.8/site-packages/tensorflow/python/framework/tensor_shape.py:1134 assert_is_compatible_with
        raise ValueError("Shapes %s and %s are incompatible" % (self, other))

    ValueError: Shapes (None, 15) and (None, 1) are incompatible

Here's my model:这是我的 model:

def model_0(opt, train_condition, xTrain, yTrain):
    model = Sequential()
    model.add(Embedding(132190, 8, input_length=60, name='embedding'))
    model.add(LSTM(128, return_sequences=True))
    model.add(LSTM(64, return_sequences=False))
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(32, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(1, activation='softmax'))
    model.compile(loss="categorical_crossentropy", optimizer=opt, metrics='accuracy')
    
    if train_condition == True:
        history = model.fit(xTrain, yTrain, epochs=50, batch_size=100, validation_split=0.2)

    opt = tf.keras.optimizers.Adam(learning_rate=0.001)
    model_0(opt, True, xTrain=x_train, yTrain=y_train)

x_train and y_train shapes: x_train 和 y_train 形状:

x_train: (606965, 60)
y_train: (606965, 15) 

Please advise请指教

It looks like your labels don't tie to your model.您的标签似乎与您的 model 无关。 Try change last dense layer as尝试将最后一个密集层更改为

model.add(Dense(15, activation='softmax'))

Your model should be as shown below你的 model 应该如下图所示

def model_0(opt, train_condition, xTrain, yTrain):
    model = Sequential()
    model.add(Embedding(132190, 8, input_length=60, name='embedding'))
    model.add(LSTM(128, return_sequences=True))
    model.add(LSTM(64, return_sequences=False))
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(64, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(32, activation='relu'))
    model.add(Dropout(0.2))
    model.add(Dense(15, activation='softmax'))
    model.compile(loss="categorical_crossentropy", optimizer=opt, metrics='accuracy')
    
    if train_condition == True:
        history = model.fit(xTrain, yTrain, epochs=50, batch_size=100, validation_split=0.2)

    opt = tf.keras.optimizers.Adam(learning_rate=0.001)
    model_0(opt, True, xTrain=x_train, yTrain=y_train)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM