我最近发现了一个概念验证实现,它使用data = np.zeros((len(raw_data), n_input, vocab_size),dtype=np.uint8)
以单热编码方式准备功能:
np.uint8
如上所示,单个输入为tf.float32
。
检查模型后,我意识到张量流模型的输入占位符定义为x = tf.placeholder(tf.float32, [None, n_input, vocab_size], name="onehotin")
:
(0/1)
我的特殊问题:
张量流如何处理这个"不匹配"输入类型。这些值np.float32
是否由tensorflow正确解释或转换。如果是这样,这是在文档中提到的某个地方。谷歌搜索后我找不到答案。应该提到的是,模型的运行和价值似乎是合理的。但是,将输入numpy功能键入为my_chr<-c('2017-02-19 06:00','2017-03-10 06:00','2017-04-15 06:00')
myPSX<-as.POSIXct(my_chr,format='%Y-%m-%d %H:%M',tz='UTC')
PSXappend<-as.POSIXct('2017-08-09 06:00',format='%Y-%m-%d %H:%M',tz='UTC')
会导致需要大量内存。
相关性: 采用输入管道/将模型推广到生产中后,运行但经过错误训练的模型的行为会有所不同。
答案 0 :(得分:1)
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
是在内部分配的。