gpt4 book ai didi

python - 如何从自定义神经网络模型中获取对数和概率

转载 作者:行者123 更新时间:2023-12-05 03:27:01 31 4
gpt4 key购买 nike

以下源代码可以从 Tensorflow 中的 imagenet 预训练模型中获取概率和 logits

import tensorflow as tf
import tensorflow.contrib.slim as slim
import tensorflow.contrib.slim.nets as nets
import PIL
import numpy as np

import warnings
warnings.filterwarnings('ignore')

#Sets the threshold for what messages will be logged
tf.logging.set_verbosity(tf.logging.ERROR)
#Starts the Interactive Session
sess=tf.InteractiveSession()

#Get logits and probs from the model
def inception(image, reuse):
preprocessed = tf.multiply(tf.subtract(tf.expand_dims(image, 0), 0.5), 2.0)
arg_scope = nets.inception.inception_v3_arg_scope(weight_decay=0.0)
with slim.arg_scope(arg_scope):
logits, _ = nets.inception.inception_v3(preprocessed, 1001, is_training=False, reuse=reuse)
logits = logits[:,1:]
probs = tf.nn.softmax(logits)
return logits, probs

#Returns logits and probabilities from the network
logits, probs = inception(image, reuse=False)

现在,假设我有以下模型:在另一个数据集中微调的 RESNET-50,我将简单地加载它的模型定义和权重:

json_file = open('/path/resnet-model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()

model = model_from_json(loaded_model_json)
#load weights into new model
model.load_weights("/path/weights/resnet-weights.h5")

如何制作一个类似的函数来从这样一个现有的预训练模型中获取概率和对数?

P.s1:可以找到模型、它的权重和示例图像输入 HERE

P.s2:一些现有的问题解决方案,例如 HERE只解释如何获得一个或另一个。我需要一个类似于上面第一个函数的函数,它可以为我提供从文件加载的现有训练模型的 logits 和 probs。

最佳答案

IIUC,你应该能够以同样的方式直接做到这一点:

import tensorflow as tf

json_file = open('/content/resnet-model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()

loaded_model_json = loaded_model_json.replace('"activation":"softmax"', '"activation":"linear"')
model = tf.keras.models.model_from_json(loaded_model_json)

image = tf.keras.preprocessing.image.load_img('/content/sample-image.jpeg')
image = tf.constant([tf.keras.preprocessing.image.img_to_array(image)])
logits = model(image)
probs = tf.nn.softmax(logits)

您还可以使用 reverse 定义一个新模型softmax 函数:

def inv_softmax(x, C):
return tf.math.log(x) + C

outputs = tf.keras.layers.Lambda(lambda x : inv_softmax(x, tf.math.log(10.)),name='inv_softmax')(model.output)
new_model = tf.keras.Model(model.input, outputs)
logits = new_model(image)
probs = tf.nn.softmax(logits)

或者只是删除最后一层并定义一个具有线性激活函数的新层。

关于python - 如何从自定义神经网络模型中获取对数和概率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71557494/

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