gpt4 book ai didi

tensorflow - 如何获得正确的尸鬼?

转载 作者:行者123 更新时间:2023-12-04 07:32:55 24 4
gpt4 key购买 nike

  • 我正在研究 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
    _________________________________________________________________
  • 在用训练数据拟合模型后,我想预测测试数据并在展平层之后获得值(权重)(我想使用这个权重作为聚类算法的输入)。
    for i, val in enumerate(X_test_text):
    y_predict = model.predict(X_test_text[i:i+1])
    embedding = XXX_get_wights_XXX(i: ??
  • 我在预测后检查了 wights 值,结果向量长度与我想的不同:
  • 为什么model.get_layer("flatten").get_weights()给我一个长度为 0 的列表? (我确信该层将用作嵌入层,并且会给我一个包含 32 个值的向量)
  • 为什么model.get_layer("dense").get_weights()[0].shape给出元组 (32, 10) ?为什么元组包含两个值而不是一个? (只有 32 岁?)
  • 为每个预测值获得 32 个 wights(在展平层之后)的向量的正确方法是什么?
  • 最佳答案

    您正在寻找模型输出而不是模型权重。从您的 Flatten 获取模型输出层,你只需要初始化一个新模型来提取和产生你想要的输出......

    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.fit(X_train,y_train, ...)
    Flatten 获取模型输出层:
    n_sample = 20
    X_test = np.random.randint(0,14000, (n_sample, 100))

    from tensorflow.keras.models import Model

    intermediate_model = Model(model.inputs, model.get_layer("flatten").output)
    intermediate_model.predict(X_test).shape # (n_sample, 32)
    PS:使用 Flatten之后 GlobalMaxPooling没用,因为 GlobalMaxPooling输出是二维的

    关于tensorflow - 如何获得正确的尸鬼?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67868206/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com