如何将张量转换为nArray

2024-04-29 16:40:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我是tensorflow的初学者。 yolo_模型.predict返回张量。但是当我使用cpu_nms时,我需要将pred_框pred_分数转换为ndarray。 我尝试过使用.eval(),但遇到了一些失败的错误

'''

img = np.asarray(img, np.float32)
img = img[np.newaxis, :] / 255.

with tf.Session() as sess:

    input_data = tf.placeholder(tf.float32, [1, args.new_size[1], args.new_size[0], 3], name='input_data')
    yolo_model = yolov3(args.num_class, args.anchors)
    with tf.variable_scope('yolov3'):
        pred_feature_maps = yolo_model.forward(input_data, False)

    pred_boxes, pred_confs, pred_probs = yolo_model.predict(pred_feature_maps)

    pred_scores = pred_confs * pred_probs
    # pred_boxes = pred_boxes.eval()
    # pred_scores = pred_scores.eval()

    boxes, scores, labels = cpu_nms(pred_boxes, pred_scores, args.num_class, max_boxes=200, score_thresh=0.3, iou_thresh=0.45)

    saver = tf.train.Saver()
    saver.restore(sess, args.restore_path)

    boxes_, scores_, labels_ = sess.run([boxes, scores, labels], feed_dict={input_data: img})

''' 谢谢


Tags: imginputdatalabelsmodeltfevalnp
1条回答
网友
1楼 · 发布于 2024-04-29 16:40:02

如果要提取变量张量,然后将其转换为数组,那么下面是不同版本的tensorflow的示例

如果您希望提取tensorflow 1.14版或其他支持会话的版本中的值,则下面是一个示例-

#!pip install tensorflow==1.14

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np
import time

print("tensorflow version:",tf.__version__)

def make_discriminator_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(7,(3,3) , padding = "same" , input_shape = (28,28,1)))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.LeakyReLU())
    model.add(tf.keras.layers.Dense(50,activation = 'relu'))
    model.add(tf.keras.layers.Dense(1))
    return model 

model_discriminator = make_discriminator_model()
output = model_discriminator(np.random.rand(1,28,28,1).astype("float32"))

#initialize the variable
init_op = tf.initialize_all_variables()

#run the graph
with tf.Session() as sess:
    sess.run(init_op) #execute init_op
    print("Output as a Tensor:",output)
    out = np.array(sess.run(output))
    print("Output as an Array:",out)
    print("Type of the Array:",type(out))

输出将为-

tensorflow version: 1.14.0
Output as a Tensor: Tensor("sequential_7/dense_15/BiasAdd:0", shape=(1, 1), dtype=float32)
Output as an Array: [[-0.29746282]]
Type of the Array: <class 'numpy.ndarray'>

如果您希望提取tensorflow 2.1版或其他支持tensor打印的版本中的值,则以下是一个示例-

#!pip install tensorflow==2.1

import tensorflow as tf
import matplotlib.pyplot as plt
import numpy as np

print("tensorflow version:",tf.__version__)

def make_discriminator_model():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(7,(3,3) , padding = "same" , input_shape = (28,28,1)))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.LeakyReLU())
    model.add(tf.keras.layers.Dense(50,activation = 'relu'))
    model.add(tf.keras.layers.Dense(1))
    return model 

model_discriminator = make_discriminator_model()
output = model_discriminator(np.random.rand(1,28,28,1).astype("float32"))
print("Output as a Tensor:",output)

out = np.array(output)
print("Output as an Array:",out)
print("Type of the Array:",type(out))

输出将为-

tensorflow version: 2.1.0
Output as a Tensor: tf.Tensor([[0.32392436]], shape=(1, 1), dtype=float32)
Output as an Array: [[0.32392436]]
Type of the Array: <class 'numpy.ndarray'>

注意:有符号张量和变量张量,您可以理解它们之间的区别-Symbolic Tensor Vs Variable Tensor

相关问题 更多 >