gpt4 book ai didi

python - 获取softmax层之前CNN最后一层获得的向量

转载 作者:行者123 更新时间:2023-12-01 01:26:34 25 4
gpt4 key购买 nike

我正在尝试使用 CNN 对输入进行编码来实现一个系统。在CNN之后,我需要获取一个向量并将其用于另一种深度学习方法。

  def get_input_representation(self):
# get word vectors from embedding
inputs = tf.nn.embedding_lookup(self.embeddings, self.input_placeholder)


sequence_length = inputs.shape[1] # 56
vocabulary_size = 160 # 18765
embedding_dim = 256
filter_sizes = [3,4,5]
num_filters = 3
drop = 0.5

epochs = 10
batch_size = 30

# this returns a tensor
print("Creating Model...")
inputs = Input(shape=(sequence_length,), dtype='int32')
embedding = Embedding(input_dim=vocabulary_size, output_dim=embedding_dim, input_length=sequence_length)(inputs)
reshape = Reshape((sequence_length,embedding_dim,1))(embedding)

conv_0 = Conv2D(num_filters, kernel_size=(filter_sizes[0], embedding_dim), padding='valid', kernel_initializer='normal', activation='relu')(reshape)
conv_1 = Conv2D(num_filters, kernel_size=(filter_sizes[1], embedding_dim), padding='valid', kernel_initializer='normal', activation='relu')(reshape)
conv_2 = Conv2D(num_filters, kernel_size=(filter_sizes[2], embedding_dim), padding='valid', kernel_initializer='normal', activation='relu')(reshape)

maxpool_0 = MaxPool2D(pool_size=(sequence_length - filter_sizes[0] + 1, 1), strides=(1,1), padding='valid')(conv_0)
maxpool_1 = MaxPool2D(pool_size=(sequence_length - filter_sizes[1] + 1, 1), strides=(1,1), padding='valid')(conv_1)
maxpool_2 = MaxPool2D(pool_size=(sequence_length - filter_sizes[2] + 1, 1), strides=(1,1), padding='valid')(conv_2)

concatenated_tensor = Concatenate(axis=1)([maxpool_0, maxpool_1, maxpool_2])
flatten = Flatten()(concatenated_tensor)
dropout = Dropout(drop)(flatten)
output = Dense(units=2, activation='softmax')(dropout)
model = Model(inputs=inputs, outputs=output)
adam = Adam(lr=1e-4, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)

model.compile(optimizer=adam, loss='binary_crossentropy', metrics=['accuracy'])
adam = Adam(lr=1e-4, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)

model.compile(optimizer=adam, loss='binary_crossentropy', metrics=['accuracy'])
print("Traning Model...")
model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, callbacks=[checkpoint], validation_data=(X_test, y_test)) # starts training


return ??

上面的代码使用X_trainY_train训练模型,然后测试它。然而,在我的系统中,我没有 Y_trainY_test,我只需要 softmax 层之前最后一个隐藏层中的向量。我怎样才能获得它?

最佳答案

为此,您可以定义一个后端函数来获取任意层的输出:

from keras import backend as K

func = K.function([model.input], [model.layers[index_of_layer].output])

您可以使用 model.summary() 找到所需图层的索引,其中图层从索引零开始列出。如果您需要最后一层之前的层,您可以使用 -2 作为索引(即 .layers 属性实际上是一个列表,因此您可以像 python 中的列表一样对其进行索引)。然后,您可以通过传递输入数组的列表来使用您定义的函数:

outputs = func(inputs)

或者,您也可以为此目的定义一个模型。 Keras documentation 中已对此进行了介绍。更彻底,所以我建议您阅读该内容。

关于python - 获取softmax层之前CNN最后一层获得的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53280916/

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