如何将 numpy 数组转换为标准 TensorFlow 格式?

Posted

技术标签:

【中文标题】如何将 numpy 数组转换为标准 TensorFlow 格式?【英文标题】:How to convert numpy arrays to standard TensorFlow format? 【发布时间】:2016-08-23 21:28:42 【问题描述】:

我有两个 numpy 数组:

包含验证码图片的图片 另一个包含相应标签(单热矢量格式)

我想将这些加载到 TensorFlow 中,以便使用神经网络对它们进行分类。如何做到这一点?

numpy 数组需要有什么形状?

附加信息 - 我的图像是 60(高)乘 160(宽)像素,每个像素都有 5 个字母数字字符。这是一个示例图像:

每个标签都是一个 5 x 62 的数组。

【问题讨论】:

【参考方案1】:

你可以使用tf.convert_to_tensor():

import tensorflow as tf
import numpy as np

data = [[1,2,3],[4,5,6]]
data_np = np.asarray(data, np.float32)

data_tf = tf.convert_to_tensor(data_np, np.float32)

sess = tf.InteractiveSession()  
print(data_tf.eval())

sess.close()

这是此方法的文档链接:

https://www.tensorflow.org/api_docs/python/tf/convert_to_tensor

【讨论】:

【参考方案2】:

您可以为此目的使用tf.pack(TensorFlow 1.0.0 中的tf.stack)方法。下面是如何将numpy.ndarray 类型的随机图像打包成Tensor

import numpy as np
import tensorflow as tf
random_image = np.random.randint(0,256, (300,400,3))
random_image_tensor = tf.pack(random_image)
tf.InteractiveSession()
evaluated_tensor = random_image_tensor.eval()

更新:要将 Python 对象转换为张量,您可以使用 tf.convert_to_tensor 函数。

【讨论】:

没有tf.pack tf.pack 后面的括号中我已经提到,如果使用TensorFlow,你应该在较新的版本中使用tf.stack【参考方案3】:

您可以使用占位符和 feed_dict。

假设我们有这样的 numpy 数组:

trX = np.linspace(-1, 1, 101) 
trY = 2 * trX + np.random.randn(*trX.shape) * 0.33 

你可以声明两个占位符:

X = tf.placeholder("float") 
Y = tf.placeholder("float")

然后,在您的模型、成本等中使用这些占位符(X 和 Y): 模型 = tf.mul(X, w) ... Y ... ...

最后,当您运行模型/成本时,使用 feed_dict 输入 numpy 数组:

with tf.Session() as sess:
.... 
    sess.run(model, feed_dict=X: trY, Y: trY)

【讨论】:

这种方法是否允许我使用内置的张量流函数,例如下一批? @KeshavChoudhary MNIST 的下一批?当然可以,但是您需要对数据集进行一些修改。 我想构建一个像 MNIST 这样的数据集,但我使用自己的图像,我是 TensorFlow 和神经网络的初学者。创建像 MNIST 这样的数据集以便我可以按照基本教程进行操作的最简单方法是什么?

以上是关于如何将 numpy 数组转换为标准 TensorFlow 格式?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 NumPy 数组标准化为单位向量?

如何将 numpy 数组列表转换为单个 numpy 数组?

如何将numpy数组列表转换为numpy数组

如何将 2D float numpy 数组转换为 2D int numpy 数组?

如何将 PIL 图像转换为 numpy 数组?

如何将csv文件转换为numpy数组格式?