gpt4 book ai didi

python - Tensorflow:加载预训练的 ResNet 模型时出错

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:00 24 4
gpt4 key购买 nike

我想使用来自 Tensorflow 的预训练 ResNet 模型。我下载了 code (resnet_v1.py) 用于模型和 checkpoint (resnet_v1_50.ckpt) 文件 here .

我已经可以使用以下帖子解决错误 ImportError: No module named 'nets':请参阅 here来自tsveti_iko的答案.

现在我收到以下错误,不知道该怎么办:

NotFoundError (see above for traceback): Restoring from checkpoint failed. 
This is most likely due to a Variable name or other graph key that is missing from the checkpoint.
Please ensure that you have not altered the graph expected based on the checkpoint. Original error:

Tensor name "resnet_v1_50/block1/unit_1/bottleneck_v1/conv1/biases"
not found in checkpoint files /home/resnet_v1_50.ckpt
[[node save/RestoreV2 (defined at my_resnet.py:34) =
RestoreV2[dtypes=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ...,
DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device="/job:localhost
/replica:0/task:0/device:CPU:0"](_arg_save/Const_0_0, save/RestoreV2
/tensor_names, save/RestoreV2/shape_and_slices)]]

这是我在尝试加载模型时使用的代码:

import numpy as np
import tensorflow as tf
import resnet_v1

# Restore variables of resnet model
slim = tf.contrib.slim

# Paths
network_dir = "home/resnet_v1_50.ckpt"

# Image dimensions
in_width, in_height, in_channels = 224, 224, 3

# Placeholder
X = tf.placeholder(tf.float32, [None, in_width, in_height, in_channels])

# Define network graph
logits, activations = resnet_v1.resnet_v1_50(X, is_training=False)
prediction = tf.argmax(logits, 1)

with tf.Session() as sess:
variables_to_restore = slim.get_variables_to_restore()
saver = tf.train.Saver(variables_to_restore)
saver.restore(sess, network_dir)

# Restore variables
variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)

# Feed random image into resnet
img = np.random.randn(1, in_width, in_height, in_channels)
pred = sess.run(prediction, feed_dict={X:img})

谁能告诉我,为什么它不起作用?我必须如何更改我的代码才能使其运行?

最佳答案

也许您可以使用 tf.keras.applications 中的 ResNet50 ?

根据错误,如果您没有以任何方式更改图表,并且这是您的全部源代码,那么它可能真的很难调试。

如果你选择理智的tf.keras.applications.resnet50你可以像这样简单地做到这一点:

import tensorflow

in_width, in_height, in_channels = 224, 224, 3

pretrained_resnet = tensorflow.keras.applications.ResNet50(
weights="imagenet",
include_top=False,
input_shape=(in_width, in_height, in_channels),
)

# You can freeze some layers if you want, depends on your task
# Make "top" (last 3 layers below) whatever fits your task as well

model = tensorflow.keras.models.Sequential(
[
pretrained_resnet,
tensorflow.keras.layers.Flatten(),
tensorflow.keras.layers.Dense(1024, activation="relu"),
tensorflow.keras.layers.Dense(10, activation="softmax"),
]
)

print(model.summary())

现在推荐使用这种方法,尤其是考虑到即将推出的 Tensorflow 2.0、完整性和可读性。顺便提一句。这个模型和Tensorflow提供的模型是一样的,都是从IIRC转过来的。

您可以在链接文档和各种博客文章(如 this one)中阅读有关 tf.keras.applications 的更多信息或其他网络资源。

我如何使用 Keras

回答评论中的问题

  • How do I pass images to the network?:如果要进行预测,请使用 model.predict(image),其中 image 是 np.数组。就这么简单。

  • 如何访问权重?:好吧,这个更复杂......开个玩笑,每一层都有 .get_weights() 方法返回它是权重和偏差,您可以使用 for layer in model.layers() 迭代层。您也可以使用 model.get_weights() 一次获取所有权重。

总而言之,您将学习 Keras,并在比调试此问题更短的时间内比使用 Tensorflow 更高效。他们有 30 seconds guide这是有原因的。

顺便说一句。Tensorflow 默认带有 Keras,因此,Tensorflow 的 Keras 风格 Tensorflow 的一部分(无论这听起来多么令人困惑)。这就是我在示例中使用 tensorflow 的原因。

使用 Tensorflow 的 Hub 解决方案

您似乎可以使用 Hub 加载和微调 Resn​​et50,如 this link 中所述.

关于python - Tensorflow:加载预训练的 ResNet 模型时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54953008/

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