【发布时间】:2020-09-28 13:13:54
【问题描述】:
我已将 imdb 数据集转换为维度为 768 的 BERT 嵌入。因此,我有 40000 个 768 个特征的样本用于训练和 10000 个用于验证的样本,大小相同为 768。我已经尝试了密集层,我已经达到了大约85% 的准确率,没有太多问题。但是,在使用 convs 层和 lstms 层时,我遇到了尺寸问题。我缺少的另一个概念是我不知道这些层的正确顺序。我假设它应该就在模型的入口处,因为这些层能够捕获时间依赖关系,并且通过 BERT 嵌入可以学习这些依赖关系。我正在使用 200 条评论的批量大小。提前感谢您的任何澄清。
我相信,由于我已经在使用 BERT 嵌入,因此我不需要具有 Embeddings 类型的输入层,但我也不确定这一点。
免责声明:经过一些实验,我认为 One 不需要 LSTM 层,也不需要 CNN。分类应该是密集的,因为嵌入应该带来所有的上下文信息。到那时我还不够聪明(仍然没有),也许我只是在尝试不同的方法
我的输入训练集:
np.array(x_train).shape
(40000, 768)
还有我正在使用的模型
import keras
from keras import models
from keras.models import Sequential
from keras import layers
from keras.layers import Embedding, Bidirectional, Dense, LSTM, Conv1D, MaxPooling1D, Flatten, Reshape, TimeDistributed
from keras import optimizers
reduce_lr = keras.callbacks.callbacks.ReduceLROnPlateau(monitor='val_loss', factor=0.50, patience=2, verbose=1, mode='auto', cooldown=0, min_lr=0.00001)
early = keras.callbacks.EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto')
model1 = Sequential()
# CONVS + POOLING LAYERS or RECURRENT LAYERS
# CONVS + POOLING LAYERS or RECURRENT LAYERS
model1.add(Dense(526, activation='relu'))
model1.add(Dense(128, activation='relu'))
model1.add(Dense(64, activation='relu'))
model1.add(Dense(2, activation='softmax'))
model1.summary()
adam = optimizers.Adam(learning_rate=0.01, beta_1=0.9, beta_2=0.999, amsgrad=False)
model1.compile(loss='sparse_categorical_crossentropy',
optimizer=adam,
metrics=['accuracy'])
history = model1.fit(np.array(x_train), np.array(y_train),
epochs= 20,
batch_size = 200,
validation_data = (np.array(x_val), np.array(y_val)), callbacks = [reduce_lr, early]
)
【问题讨论】:
标签: python tensorflow keras