我有一个CNN
的{{1}}模型,该模型已经在我的数据集中进行了训练。该模型是这样的
image classification
训练后,我想获得输入到预训练模型中的图像的特征向量,即,我想获得Convolution
Relu
pooling
Convolution
Relu
Convolution
Relu
pooling
flat
fully connected (FC1)
Relu
fully connected (FC2)
softmax
层的输出。有什么方法可以获取它,我浏览了网络,但找不到任何有用的建议,对您有很大帮助。
培训脚本
FC1
测试脚本
# input
x = tf.placeholder(tf.float32, shape=[None, img_size_h, img_size_w, num_channels], name='x')
# lables
y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')
y_true_cls = tf.argmax(y_true, axis=1)
y_pred = build_model(x) # Builds model architecture
y_pred_cls = tf.argmax(y_pred, axis=1)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true)
cost = tf.reduce_mean(cross_entropy)
optimizer = tf.train.MomentumOptimizer(learn_rate, 0.9, use_locking=False, use_nesterov=True).minimize(cost)
accuracy = tf.reduce_mean(tf.cast(tf.equal(y_pred_cls, y_true_cls), tf.float32))
sess = tf.Session()
sess.run(tf.global_variables_initializer())
tf_saver = tf.train.Saver()
train(num_iteration) # Trains the network and saves the model
sess.close()
答案 0 :(得分:2)
您可以直接在右侧张量进行sess.run得到的值。首先,您需要张量。您可以在build_model中通过添加名称参数(可以对任何张量执行此操作)来为其命名,例如:
FC1 = tf.add(tf.multiply(Flat, W1), b1, name="FullyConnected1")
稍后,您可以获取完全连接层的张量并对其进行评估:
with tf.Session() as sess:
FC1 = tf.get_default_graph().get_tensor_by_name('FullyConnected1:0')
FC1_values = sess.run(FC1, feed_dict={x: input_img_arr})
(这是假设没有在图中称为FullyConnected1其它层)