{
  "format": "layers-model",
  "generatedBy": "TensorFlow.js tfjs-layers v4.22.0",
  "convertedBy": null,
  "modelTopology": {
    "class_name": "Sequential",
    "config": {
      "name": "sequential_1",
      "layers": [
        {
          "class_name": "Conv2D",
          "config": {
            "filters": 16,
            "kernel_initializer": {
              "class_name": "VarianceScaling",
              "config": {
                "scale": 1,
                "mode": "fan_avg",
                "distribution": "normal",
                "seed": null
              }
            },
            "kernel_regularizer": null,
            "kernel_constraint": null,
            "kernel_size": [
              3,
              3
            ],
            "strides": [
              1,
              1
            ],
            "padding": "same",
            "data_format": "channels_last",
            "dilation_rate": [
              1,
              1
            ],
            "activation": "relu",
            "use_bias": true,
            "bias_initializer": {
              "class_name": "Zeros",
              "config": {}
            },
            "bias_regularizer": null,
            "activity_regularizer": null,
            "bias_constraint": null,
            "name": "conv_relu_16",
            "trainable": true,
            "batch_input_shape": [
              null,
              28,
              28,
              1
            ],
            "dtype": "float32"
          }
        },
        {
          "class_name": "MaxPooling2D",
          "config": {
            "pool_size": [
              2,
              2
            ],
            "padding": "valid",
            "strides": [
              2,
              2
            ],
            "data_format": "channels_last",
            "name": "max_pool_1",
            "trainable": true
          }
        },
        {
          "class_name": "Conv2D",
          "config": {
            "filters": 32,
            "kernel_initializer": {
              "class_name": "VarianceScaling",
              "config": {
                "scale": 1,
                "mode": "fan_avg",
                "distribution": "normal",
                "seed": null
              }
            },
            "kernel_regularizer": null,
            "kernel_constraint": null,
            "kernel_size": [
              3,
              3
            ],
            "strides": [
              1,
              1
            ],
            "padding": "same",
            "data_format": "channels_last",
            "dilation_rate": [
              1,
              1
            ],
            "activation": "relu",
            "use_bias": true,
            "bias_initializer": {
              "class_name": "Zeros",
              "config": {}
            },
            "bias_regularizer": null,
            "activity_regularizer": null,
            "bias_constraint": null,
            "name": "conv_relu_32",
            "trainable": true
          }
        },
        {
          "class_name": "MaxPooling2D",
          "config": {
            "pool_size": [
              2,
              2
            ],
            "padding": "valid",
            "strides": [
              2,
              2
            ],
            "data_format": "channels_last",
            "name": "max_pool_2",
            "trainable": true
          }
        },
        {
          "class_name": "Flatten",
          "config": {
            "name": "flatten_features",
            "trainable": true
          }
        },
        {
          "class_name": "Dense",
          "config": {
            "units": 64,
            "activation": "relu",
            "use_bias": true,
            "kernel_initializer": {
              "class_name": "VarianceScaling",
              "config": {
                "scale": 1,
                "mode": "fan_avg",
                "distribution": "normal",
                "seed": null
              }
            },
            "bias_initializer": {
              "class_name": "Zeros",
              "config": {}
            },
            "kernel_regularizer": null,
            "bias_regularizer": null,
            "activity_regularizer": null,
            "kernel_constraint": null,
            "bias_constraint": null,
            "name": "dense_relu_64",
            "trainable": true
          }
        },
        {
          "class_name": "Dense",
          "config": {
            "units": 10,
            "activation": "softmax",
            "use_bias": true,
            "kernel_initializer": {
              "class_name": "VarianceScaling",
              "config": {
                "scale": 1,
                "mode": "fan_avg",
                "distribution": "normal",
                "seed": null
              }
            },
            "bias_initializer": {
              "class_name": "Zeros",
              "config": {}
            },
            "kernel_regularizer": null,
            "bias_regularizer": null,
            "activity_regularizer": null,
            "kernel_constraint": null,
            "bias_constraint": null,
            "name": "digit_probabilities",
            "trainable": true
          }
        }
      ]
    },
    "keras_version": "tfjs-layers 4.22.0",
    "backend": "tensor_flow.js"
  },
  "weightsManifest": [
    {
      "paths": [
        "mnist-cnn-preset.weights.bin"
      ],
      "weights": [
        {
          "name": "conv_relu_16/kernel",
          "shape": [
            3,
            3,
            1,
            16
          ],
          "dtype": "float32"
        },
        {
          "name": "conv_relu_16/bias",
          "shape": [
            16
          ],
          "dtype": "float32"
        },
        {
          "name": "conv_relu_32/kernel",
          "shape": [
            3,
            3,
            16,
            32
          ],
          "dtype": "float32"
        },
        {
          "name": "conv_relu_32/bias",
          "shape": [
            32
          ],
          "dtype": "float32"
        },
        {
          "name": "dense_relu_64/kernel",
          "shape": [
            1568,
            64
          ],
          "dtype": "float32"
        },
        {
          "name": "dense_relu_64/bias",
          "shape": [
            64
          ],
          "dtype": "float32"
        },
        {
          "name": "digit_probabilities/kernel",
          "shape": [
            64,
            10
          ],
          "dtype": "float32"
        },
        {
          "name": "digit_probabilities/bias",
          "shape": [
            10
          ],
          "dtype": "float32"
        }
      ]
    }
  ],
  "userDefinedMetadata": {
    "displayName": "教师预置 CNN 高精度模型",
    "modelType": "cnn",
    "architecture": "CNN：28×28×1 → Conv/Pool → 10",
    "description": "使用卷积网络训练得到的高精度体验模型。",
    "accuracy": 0.9908999800682068,
    "loss": 0.03109259344637394,
    "epochs": 12,
    "trainingHistoryPath": "models/mnist-cnn-preset/training-history.json"
  }
}