假设我们有一个JSON记录,如:
{
"Name" : "Tom",
"Diseases" : [{
"Asthma" : [{
"Severity":5
"Medication" : [{
"Benzene" : [{
"Start Date" : 10-5-2017,
"End Date" : 22-5-2018
}]
}]
}]
}]
}
它有很多相互依赖的功能,有没有办法可以将它输入到TensorFlow Deep神经网络中?
答案 0 :(得分:2)
或多或少,但不是直接的。有一个API可以提供JSON数据,但这必须是JSON mapping的tf.train.Example
protocol buffers object。但是,这些对象不能像您显示的那样保存分层数据,只有features的集合对应于整数,浮点数或字节。在你的情况下,你可能是这样的:
{
"features": {
"feature": {
"Name": { "bytes_list": { value: ["VG9t"] } },
"Disease": { "bytes_list": { value: ["QXN0aG1h"] } },
"Severity": { "int64_list": { value: [5] } },
"Medication": { "bytes_list": { value: ["QmVuemVuZQ=="] } }
}
}
}
请注意,字符串必须以字节数组的形式给出,需要在Base64中以协议缓冲区的JSON格式进行编码。但是,这不允许有多种疾病的记录,因为正如我所说,它不支持层次结构。
例如,您可以为每位患者和疾病提供一条记录。如果您实际上已经达到了将JSON文档作为输入的点,则可以使用tf.decode_json_example
来获取对象的协议缓冲区二进制表示,然后使用tf.parse_example
来实际获取张量。
答案 1 :(得分:0)
2021 年更新:
现在似乎有 tfio.experimental.serialization.decode_json 的实验性支持,但还没有太多文档。
您可以在 PR 或 unit tests
中阅读更多内容示例代码:
import tensorflow_io as tfio
json_text = r'{"test":["this","is","some","data"],"bar":42,"baz":[[1,2],[2,3],[3,4],[4,5]]}'
specs = {
"test": tf.TensorSpec(tf.TensorShape([4]), tf.string),
"bar": tf.TensorSpec(tf.TensorShape([]), tf.int32),
"baz": tf.TensorSpec(tf.TensorShape([4,2]), tf.int32),
}
parsed = tfio.experimental.serialization.decode_json(json_text, specs)
print(parsed)
输出:
{
'test': <tf.Tensor: shape=(4,), dtype=string, numpy=array([b'this', b'is', b'some', b'data'], dtype=object)>,
'bar': <tf.Tensor: shape=(), dtype=int32, numpy=42>,
'baz': <tf.Tensor: shape=(4, 2), dtype=int32, numpy=
array([[1, 2],
[2, 3],
[3, 4],
[4, 5]], dtype=int32)>
}