我将imdb数据集转换为尺寸为768的BERT嵌入。因此,我有40000个样本用于768个特征进行训练,而10000个样本用于与768大小相同的验证。我尝试了密集层,并且达到了大约准确度达85%,没有太大问题。但是,在使用转换层和lstms层时,我遇到了尺寸问题。我还缺少一个概念,那就是我不知道这些层的正确顺序。我认为它应该在模型的入口处,因为这些层能够捕获时间依赖性,并且通过BERT嵌入可以学习这些依赖性。我正在使用200条评论的批次大小。预先感谢您进行任何澄清。
我相信,由于我已经在使用BERT嵌入,因此不需要输入类型为Embeddings的输入层,但是我不确定这一点。
我的输入训练集:
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]
)
答案 0 :(得分:2)
Conv1D和LSTM需要3D数据。
np.array(x_train).shape
(40000, 768)
正确的形状应为(40000, 768, 1)
因此,调整数组的形状。
x_train = x_train.reshpae(-1, 768, 1)
model1 = Sequential()
model1.add(Conv1D(128, 3, activation='relu')) # input_shape = (768,1)
model1.add(Conv1D(256, 3, activation='relu'))
# flat
model1.add(Flatten())
model1.add(Dense(2, activation='softmax'))
model1.summary()