Tensorflow 推理到 logits 层 - 用于预训练模型的批次
Tensorflow inference upto logits layer - for batches on pre-trained model
我正在尝试 运行 对我拥有的数据集进行推理 (X_train
),并在未对输出应用 softmax 的情况下获取 logits 层的值。我从检查点文件 (model_X.ckpt
) 加载的模型具有名为 "logits" 的 logits 层。所以基本上,我想 运行:
sess.run("model_X/logits:0", feed_dict: {"Placeholder:0": X_train, keep_prob:1.0})
但是模型将输入数据集大小限制为 32,这不允许我一次传递 10,000 个输入。这就是为什么我也这样使用批量创建:
features_placeholder = tf.placeholder(X_train.dtype, X_train.shape)
dataset = tf.data.Dataset.from_tensor_slices((features_placeholder))
dataset = dataset.batch(32)
我创建了一个迭代器(使用一次性迭代器使我的图形大小爆炸,完全基于我的推理):
def initialize_iterator(sess, iterator, features):
sess.run(iterator.initializer, feed_dict={features_placeholder: features})
iterator = dataset.make_initializable_iterator()
initialize_iterator(sess, iterator, X_train)
next_x = iterator.get_next()
# Assign the first batch:
val = sess.run(next_x)
layer = "model_X/logits:0"
units = sess.run(layer,feed_dict={"Placeholder:0": val, keep_prob:1.0})
如何遍历所有批次以推断所有输入?
因此,要遍历所有批次,对于 100k 的数据集大小和 32 的批次大小(3125 次迭代),我只需要做:
def body(sess, batch, arr):
val = sess.run(batch)
def getActivations(sess,layer,stimuli,labels):
units = sess.run(layer,feed_dict={"Placeholder:0": np.reshape(stimuli,[32,64,64,3]), keep_prob:1.0})
return units
try:
res = getActivations(sess,"model_X/logits:0",val)
arr = np.append(arr, np.reshape(res,[32,1024]), axis=0)
except tf.errors.OutOfRangeError:
print("End of dataset")
return arr, pred
with tf.Session() as sess:
load_graph(sess)
initialize_iterator(sess, iterator, X_train)
next_x = iterator.get_next()
arr = np.empty((0,2048), int)
for i in range(0,3125):
arr = body(sess, next_x, arr)
我正在尝试 运行 对我拥有的数据集进行推理 (X_train
),并在未对输出应用 softmax 的情况下获取 logits 层的值。我从检查点文件 (model_X.ckpt
) 加载的模型具有名为 "logits" 的 logits 层。所以基本上,我想 运行:
sess.run("model_X/logits:0", feed_dict: {"Placeholder:0": X_train, keep_prob:1.0})
但是模型将输入数据集大小限制为 32,这不允许我一次传递 10,000 个输入。这就是为什么我也这样使用批量创建:
features_placeholder = tf.placeholder(X_train.dtype, X_train.shape)
dataset = tf.data.Dataset.from_tensor_slices((features_placeholder))
dataset = dataset.batch(32)
我创建了一个迭代器(使用一次性迭代器使我的图形大小爆炸,完全基于我的推理):
def initialize_iterator(sess, iterator, features):
sess.run(iterator.initializer, feed_dict={features_placeholder: features})
iterator = dataset.make_initializable_iterator()
initialize_iterator(sess, iterator, X_train)
next_x = iterator.get_next()
# Assign the first batch:
val = sess.run(next_x)
layer = "model_X/logits:0"
units = sess.run(layer,feed_dict={"Placeholder:0": val, keep_prob:1.0})
如何遍历所有批次以推断所有输入?
因此,要遍历所有批次,对于 100k 的数据集大小和 32 的批次大小(3125 次迭代),我只需要做:
def body(sess, batch, arr):
val = sess.run(batch)
def getActivations(sess,layer,stimuli,labels):
units = sess.run(layer,feed_dict={"Placeholder:0": np.reshape(stimuli,[32,64,64,3]), keep_prob:1.0})
return units
try:
res = getActivations(sess,"model_X/logits:0",val)
arr = np.append(arr, np.reshape(res,[32,1024]), axis=0)
except tf.errors.OutOfRangeError:
print("End of dataset")
return arr, pred
with tf.Session() as sess:
load_graph(sess)
initialize_iterator(sess, iterator, X_train)
next_x = iterator.get_next()
arr = np.empty((0,2048), int)
for i in range(0,3125):
arr = body(sess, next_x, arr)