如何在张量流中将 "tensor" 转换为 "numpy" 数组?
How to convert "tensor" to "numpy" array in tensorflow?
我正在尝试在 tesnorflow2.0 版本中将张量转换为 numpy。由于 tf2.0 启用了 eager execution,因此它应该默认工作并且在正常运行时也可以工作。当我在 tf.data.Dataset API 中执行代码时,它给出了一个错误
"AttributeError: 'Tensor' object has no attribute 'numpy'"
我在 tensorflow 变量之后尝试了“.numpy()”,对于“.eval()”,我无法获得默认会话。
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
# tf.executing_eagerly()
import os
import time
import matplotlib.pyplot as plt
from IPython.display import clear_output
from model.utils import get_noise
import cv2
def random_noise(input_image):
img_out = get_noise(input_image)
return img_out
def load_denoising(image_file):
image = tf.io.read_file(image_file)
image = tf.image.decode_png(image)
real_image = image
input_image = random_noise(image.numpy())
input_image = tf.cast(input_image, tf.float32)
real_image = tf.cast(real_image, tf.float32)
return input_image, real_image
def load_image_train(image_file):
input_image, real_image = load_denoising(image_file)
return input_image, real_image
这个很好用
inp, re = load_denoising('/data/images/train/18.png')
# Check for correct run
plt.figure()
plt.imshow(inp)
print(re.shape," ", inp.shape)
这会产生上述错误
train_dataset = tf.data.Dataset.list_files('/data/images/train/*.png')
train_dataset = train_dataset.map(load_image_train,num_parallel_calls=tf.data.experimental.AUTOTUNE)
注:random_noise有cv2和sklearn函数
如果要在 tf.data.Dataset.map
调用中使用此张量,则不能对张量使用 .numpy
方法。
引擎盖下的 tf.data.Dataset
对象通过创建静态图工作:这意味着您不能使用 .numpy()
,因为 tf.Tensor
对象在 static-graph上下文没有这个属性。
因此,input_image = random_noise(image.numpy())
行应该是input_image = random_noise(image)
。
但是代码可能会再次失败,因为 random_noise
从 model.utils
包中调用 get_noise
。
如果 get_noise
函数是使用 Tensorflow 编写的,那么一切都会起作用。不然不行。
解决办法?仅使用 Tensorflow 基元编写代码。
例如,如果您的函数 get_noise
只是用输入图像的表面创建随机噪声,您可以将其定义为:
def get_noise(image):
return tf.random.normal(shape=tf.shape(image))
仅使用 Tensorflow 基元,它会起作用。
希望这篇概述对您有所帮助!
P.S:您可能有兴趣查看文章 "Analyzing tf.function to discover AutoGraph strengths and subtleties" - 它们涵盖了这方面(也许第 3 部分与您的场景相关):part 1 part 2 part 3
在TF2.x版本中,使用tf.config.run_functions_eagerly(True)
.
我正在尝试在 tesnorflow2.0 版本中将张量转换为 numpy。由于 tf2.0 启用了 eager execution,因此它应该默认工作并且在正常运行时也可以工作。当我在 tf.data.Dataset API 中执行代码时,它给出了一个错误
"AttributeError: 'Tensor' object has no attribute 'numpy'"
我在 tensorflow 变量之后尝试了“.numpy()”,对于“.eval()”,我无法获得默认会话。
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
# tf.executing_eagerly()
import os
import time
import matplotlib.pyplot as plt
from IPython.display import clear_output
from model.utils import get_noise
import cv2
def random_noise(input_image):
img_out = get_noise(input_image)
return img_out
def load_denoising(image_file):
image = tf.io.read_file(image_file)
image = tf.image.decode_png(image)
real_image = image
input_image = random_noise(image.numpy())
input_image = tf.cast(input_image, tf.float32)
real_image = tf.cast(real_image, tf.float32)
return input_image, real_image
def load_image_train(image_file):
input_image, real_image = load_denoising(image_file)
return input_image, real_image
这个很好用
inp, re = load_denoising('/data/images/train/18.png')
# Check for correct run
plt.figure()
plt.imshow(inp)
print(re.shape," ", inp.shape)
这会产生上述错误
train_dataset = tf.data.Dataset.list_files('/data/images/train/*.png')
train_dataset = train_dataset.map(load_image_train,num_parallel_calls=tf.data.experimental.AUTOTUNE)
注:random_noise有cv2和sklearn函数
如果要在 tf.data.Dataset.map
调用中使用此张量,则不能对张量使用 .numpy
方法。
引擎盖下的 tf.data.Dataset
对象通过创建静态图工作:这意味着您不能使用 .numpy()
,因为 tf.Tensor
对象在 static-graph上下文没有这个属性。
因此,input_image = random_noise(image.numpy())
行应该是input_image = random_noise(image)
。
但是代码可能会再次失败,因为 random_noise
从 model.utils
包中调用 get_noise
。
如果 get_noise
函数是使用 Tensorflow 编写的,那么一切都会起作用。不然不行。
解决办法?仅使用 Tensorflow 基元编写代码。
例如,如果您的函数 get_noise
只是用输入图像的表面创建随机噪声,您可以将其定义为:
def get_noise(image):
return tf.random.normal(shape=tf.shape(image))
仅使用 Tensorflow 基元,它会起作用。
希望这篇概述对您有所帮助!
P.S:您可能有兴趣查看文章 "Analyzing tf.function to discover AutoGraph strengths and subtleties" - 它们涵盖了这方面(也许第 3 部分与您的场景相关):part 1 part 2 part 3
在TF2.x版本中,使用tf.config.run_functions_eagerly(True)
.