【发布时间】:2021-06-07 08:22:17
【问题描述】:
- 我正在处理 NLP 数据集。
- 我有一个数据集,我想在分类问题上进行训练(包含 5 个类别),在此阶段之后,我想在测试数据上使用经过训练的模型来构建嵌入向量,该向量将用于聚类算法。
我建立了以下模型:
model = Sequential()
model.add(layers.Embedding(input_dim=14000, output_dim=100, input_length=100))
model.add(layers.Conv1D(filters=32, kernel_size=8, activation='relu'))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Flatten())
model.add(layers.Dense(10, activation='relu'))
model.add(layers.Dense(5, activation='softmax'))
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
embedding (Embedding) (None, 100, 100) 1470700
_________________________________________________________________
conv1d (Conv1D) (None, 93, 32) 25632
_________________________________________________________________
global_max_pooling1d (Global (None, 32) 0
_________________________________________________________________
flatten (Flatten) (None, 32) 0
_________________________________________________________________
dense (Dense) (None, 10) 330
_________________________________________________________________
dense_1 (Dense) (None, 5) 55
=================================================================
Total params: 1,496,717
Trainable params: 1,496,717
Non-trainable params: 0
_________________________________________________________________
-
在用训练数据拟合模型后,我想预测测试数据并获得扁平层之后的值(wights)(我想使用这个 wights 作为聚类算法的输入)。
for i, val in enumerate(X_test_text): y_predict = model.predict(X_test_text[i:i+1]) embedding = XXX_get_wights_XXX(i: ?? -
我在 predict 之后检查了 wights 值,结果向量长度与我想的不同:
- 为什么
model.get_layer("flatten").get_weights()给我一个长度为 0 的列表? (我确信这一层将用作嵌入层,并且会给我一个包含 32 个值的向量) - 为什么
model.get_layer("dense").get_weights()[0].shape给出元组 (32, 10) ?为什么元组包含两个值而不是一个? (只有 32 个?) - 为每个预测值获取包含 32 个 wight 的向量(在展平层之后)的正确方法是什么?
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning