TensorSpace.js
开始使用
基本概念
TensorSpace Converter
模型预处理
模型
网络层
网络层融合
网络层配置
在创建 TensorSpace Layer 时,可以对其进行配置。配置参数分成两种类型,一种参数是和神经网络相关的,比如Conv2d 的 kernelSize, filters, strides 参数, Dense 的 units 参数;另一种参数类型是与网络可视化效果有关,比如 initStatus, animeTime。
在不同 TensorSpace 使用情况下,对 TensorSpace Layer 做不同的配置,具体有两种情况:
模型在初始化时已载入预训练模型
如果模型在初始化时已经载入预训练的模型,比如载入了一个经过预处理的 TensorFlow 模型,我们只需对 TensorSpace Layer 配置可选的可视化相关参数即可。在这种情况下,不需要配置与神经网络相关的参数,TensorSpace 会在模型初始化阶段,根据载入的预训练模型,自动读取并注入和神经网络相关的参数。
举个例子,在已经载入一个预训练模型的情况下,可以通过以下方式配置 LeNet Layer 的参数:
let model = new TSP.models.Sequential( container );
model.add( new TSP.layers.GreyscaleInput() );
model.add( new TSP.layers.Padding2d() );
model.add( new TSP.layers.Conv2d({
  initStatus: "open"
}) );
model.add( new TSP.layers.Pooling2d() );
model.add( new TSP.layers.Conv2d() );
model.add( new TSP.layers.Pooling2d() );
model.add( new TSP.layers.Dense() );
model.add( new TSP.layers.Dense() );
model.add( new TSP.layers.Output1d({
  outputs: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
}) );
model.load({
  type: "tensorflow",
  url: "model.json"
});
model.init();
wb_sunnyNote:
当载入的预训练模型网络层形状不固定时,需要配置 TensorSpace 输入层的 shape。举个例子,Keras 应用中的 InceptionV3 预训练模型 网络层形状不固定,可以接受输入层的形状在 [299, 299, 3] - [75, 75, 3] 之间,在 TensorSpace 中可视化此类模型时,需要配置 RGBInput 的 shape,具体配置方式如下:
model.add( new TSP.layers.RGBInput({
  shape: [299, 299, 3]
}) );
在这个 TensorSpace InceptionV3 可视化应用 中,可以查看具体代码。
模型在初始化时未载入预训练模型
如果模型在初始化时未载入预训练的模型,那么将会创建一个空的 TensorSpace 模型,在这种情况下,我们需要配置必要的神经网络参数和可选的可视化参数。
举个例子,在未载入预训练模型的情况下,可以通过以下方式配置 LeNet Layer 的参数:
let model = new TSP.models.Sequential( container );
model.add( new TSP.layers.GreyscaleInput({
  shape: [28, 28, 1]
}) );
model.add( new TSP.layers.Padding2d({
  padding: [2, 2]
}) );
model.add( new TSP.layers.Conv2d({
  kernelSize: 5,
  filters: 6,
  strides: 1,
  initStatus: "open"
}) );
model.add( new TSP.layers.Pooling2d({
  poolSize: [2, 2],
  strides: [2, 2]
}) );
model.add( new TSP.layers.Conv2d({
  kernelSize: 5,
  filters: 16,
  strides: 1
}) );
model.add( new TSP.layers.Pooling2d({
  poolSize: [2, 2],
  strides: [2, 2]
}) );
model.add( new TSP.layers.Dense({
  units: 120
}) );
model.add( new TSP.layers.Dense({
  units: 84
}) );
model.add( new TSP.layers.Output1d({
  units: 10,
  outputs: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
}) );
model.init();