将 numpy uint8 送入 tensorflow float32 占位符
Feeding numpy uint8 into tensorflow float32 placeholder
我最近发现了一个概念验证实现,它使用 numpy.zeros
:
在单热编码中准备特征
data = np.zeros((len(raw_data), n_input, vocab_size),dtype=np.uint8)
从上面可以看出,单个的输入为np.uint8
。
检查模型后,我意识到tensorflow模型的输入占位符定义为tf.float32
:
x = tf.placeholder(tf.float32, [None, n_input, vocab_size], name="onehotin")
我的具体问题:
tensorflow 如何处理这种 "mismatch" 的输入类型。这些值 (0/1)
是否由 tensorflow 正确解释或转换。如果是这样,这是文档中提到的某个地方吗?谷歌搜索后我找不到答案。应该提到的是,模型运行和值似乎是合理的。但是,将输入的 numpy 特征键入 np.float32
会导致需要大量内存。
相关性:
运行 但错误训练的模型在采用输入管道/将模型投入生产后会表现不同。
Tensorflow 支持这样的 dtype 转换。
在 x + 1
等操作中,值 1
通过 tf.convert_to_tensor
函数进行验证和转换。该函数有时会在后台手动调用,当设置 dtype
参数时,该值会自动转换为这种类型。
当您将数组输入这样的占位符时:
session.run(..., feed_dict={x: data})
... 数据通过 np.asarray
调用显式转换为正确类型的 numpy 数组。请参阅 python/client/session.py
处的源代码。请注意,当 dtype 不同时,此方法 可能会重新分配缓冲区 ,而这正是您的情况。所以你的内存优化并没有像你预期的那样工作:临时的 32 位 data
是内部分配的。
我最近发现了一个概念验证实现,它使用 numpy.zeros
:
data = np.zeros((len(raw_data), n_input, vocab_size),dtype=np.uint8)
从上面可以看出,单个的输入为np.uint8
。
检查模型后,我意识到tensorflow模型的输入占位符定义为tf.float32
:
x = tf.placeholder(tf.float32, [None, n_input, vocab_size], name="onehotin")
我的具体问题:
tensorflow 如何处理这种 "mismatch" 的输入类型。这些值 (0/1)
是否由 tensorflow 正确解释或转换。如果是这样,这是文档中提到的某个地方吗?谷歌搜索后我找不到答案。应该提到的是,模型运行和值似乎是合理的。但是,将输入的 numpy 特征键入 np.float32
会导致需要大量内存。
相关性: 运行 但错误训练的模型在采用输入管道/将模型投入生产后会表现不同。
Tensorflow 支持这样的 dtype 转换。
在 x + 1
等操作中,值 1
通过 tf.convert_to_tensor
函数进行验证和转换。该函数有时会在后台手动调用,当设置 dtype
参数时,该值会自动转换为这种类型。
当您将数组输入这样的占位符时:
session.run(..., feed_dict={x: data})
... 数据通过 np.asarray
调用显式转换为正确类型的 numpy 数组。请参阅 python/client/session.py
处的源代码。请注意,当 dtype 不同时,此方法 可能会重新分配缓冲区 ,而这正是您的情况。所以你的内存优化并没有像你预期的那样工作:临时的 32 位 data
是内部分配的。