Tensorflow:对JSON数据进行培训以生成类似的输出

时间:2018-04-19 14:06:17

标签: tensorflow machine-learning neural-network

假设有一个JSON数据包含生成以下10x5单元格模式的说明,并且每个单元格可以包含以下字符之一:_ 0 x y z

还假设每个角色都可以用各种颜色显示。

模式1:

_yx_0zzyxx
_0__yz_0y_
x0_0x000yx
_y__x000zx
zyyzx_z_0y

模式2:

xx0z00yy_z
zzx_0000_x
_yxy0y__yx
_xz0z__0_y
y__x0_0_y_

模式3:

yx0x_xz0_z
xz_x0_xxxz
_yy0x_0z00
zyy0__0zyx
z_xy0_0xz0

这些是随机生成的,都是黑色的,但假设它们是根据一些规则和颜色设计的。

第一个模式的JSON看起来像:

{
  width: 10,
  height: 5,
  cells: [
    {
      value: '_',
      color: 'red'
    },
    {
      value: 'y',
      color: 'blue'
    }, ...
  ]
}

如果想要对这些数据进行训练以生成新的相似模式(同样,假设这些模式不是随机生成的),建议采用的方法是什么:

  • 读取数据(我想把JSON放到Example protobuf中,用tf.parse_example将缓冲区序列化为字符串,然后将其写入TFRecord文件)
  • 对该数据进行培训
  • 基于训练模型生成新模式
  • 提供所生成的模式的种子数据,例如,第一个单元格是字符“x”,颜色为蓝色。

我希望获得类似于我在艺术/照片风格转换中看到的内容,以及音乐/ MIDI数据(请参阅:Google Magenta)。在这些情况下,这里模型被训练成一组独特的艺术作品或旋律风格,并提供照片或引物旋律形式的种子,以生成类似于训练中使用的数据的内容。

谢谢!

1 个答案:

答案 0 :(得分:1)

我不喜欢将数据集预处理成新的形式,这使得以后很难改变并减缓未来的发展,在我看来它就像技术债务一样。

我的方法是保持你的JSON原样并编写一些简单的python代码(一个特别是生成器,意味着你使用yield而不是return语句)来读取JSON文件并吐出样品按顺序排列。

然后使用带有Dataset.from_generator(...)的tensorflow数据集输入管道从输入函数中获取数据。

https://www.tensorflow.org/programmers_guide/datasets

数据集管道提供了管理您要应用的各种转换所需的一切,您可以轻松地缓存,随机播放,批处理,预取和映射函数到一个简单的模块化,可测试的框架中。自然地进入张量流模型。