【发布时间】:2021-10-18 21:27:09
【问题描述】:
我一直在使用“CMU 电影摘要语料库”进行电影类型分类,以供自己学习,因为我对 NLP 比较陌生。这是一个多标签分类任务。我正在使用 TF-IDF 进行词向量化,然后将输出输入神经网络,但是当我尝试训练我的模型时出现以下错误:
ValueError: logits and labels must have the same shape ((None, 1) vs (None, 363))
我已阅读 StackOverflow 并尝试实现相同但问题仍然存在。但是,我能够使用相同的 TF-IDF 特征训练机器学习模型,但无法训练神经网络。
下面是代码sn-p:
创建 TF-IDF 特征
xtrain_tfidf = tfidf_vectorizer.fit_transform(xtrain)
xval_tfidf = tfidf_vectorizer.transform(xval)
xtrain_tfidf[0]
//xtrain_tfidf[0] <1x10000 sparse matrix of type '<class 'numpy.float64'>'with 63 stored elements in Compressed Sparse Row format>
构建神经网络
xtrain_tfidf = xtrain_tfidf.toarray()
xval_tfidf = xval_tfidf.toarray()
通过使用填充将所有数组设置为相同大小来预处理数据
train_data = keras.preprocessing.sequence.pad_sequences(xtrain_tfidf,
value=0,
padding='post',
maxlen=2000)
test_data = keras.preprocessing.sequence.pad_sequences(xval_tfidf,
value=0,
padding='post',
maxlen=2000)
输入形状是用于电影评论的词汇量(10,000 字)
vocab_size = 10000
model = keras.models.Sequential([
keras.layers.Dense(20, kernel_regularizer=keras.regularizers.l2(0.001),
activation=tf.nn.relu, input_shape=(2000,)),
keras.layers.Dense(16, kernel_regularizer=keras.regularizers.l2(0.001),
activation=tf.nn.relu),
keras.layers.Dense(1, activation=tf.nn.sigmoid)
])
模型特征
model.compile(optimizer=tf.optimizers.Adam(),
loss='binary_crossentropy',
metrics=['accuracy'])
创建交叉验证集
x_val = train_data[:1000]
partial_x_train = train_data[1000:]
y_val = y_train[:1000]
partial_y_train = y_train[1000:]
将模型训练 40 个 epoch
history = model.fit(partial_x_train,
partial_y_train,
epochs=40,
batch_size=512,
validation_data=(x_val, y_val),
verbose=2)
【问题讨论】:
标签: python tensorflow keras neural-network nlp