meta_info_def {
  stripped_op_list {
    op {
      name: "Add"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      input_arg {
        name: "y"
        type_attr: "T"
      }
      output_arg {
        name: "z"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_UINT8
            type: DT_INT8
            type: DT_INT16
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
            type: DT_STRING
          }
        }
      }
    }
    op {
      name: "AssignVariableOp"
      input_arg {
        name: "resource"
        type: DT_RESOURCE
      }
      input_arg {
        name: "value"
        type_attr: "dtype"
      }
      attr {
        name: "dtype"
        type: "type"
      }
      is_stateful: true
    }
    op {
      name: "BroadcastGradientArgs"
      input_arg {
        name: "s0"
        type_attr: "T"
      }
      input_arg {
        name: "s1"
        type_attr: "T"
      }
      output_arg {
        name: "r0"
        type_attr: "T"
      }
      output_arg {
        name: "r1"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "Cast"
      input_arg {
        name: "x"
        type_attr: "SrcT"
      }
      output_arg {
        name: "y"
        type_attr: "DstT"
      }
      attr {
        name: "SrcT"
        type: "type"
      }
      attr {
        name: "DstT"
        type: "type"
      }
    }
    op {
      name: "Const"
      output_arg {
        name: "output"
        type_attr: "dtype"
      }
      attr {
        name: "value"
        type: "tensor"
      }
      attr {
        name: "dtype"
        type: "type"
      }
    }
    op {
      name: "Fill"
      input_arg {
        name: "dims"
        type_attr: "index_type"
      }
      input_arg {
        name: "value"
        type_attr: "T"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
      }
      attr {
        name: "index_type"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "FloorDiv"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      input_arg {
        name: "y"
        type_attr: "T"
      }
      output_arg {
        name: "z"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_UINT8
            type: DT_INT8
            type: DT_UINT16
            type: DT_INT16
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
    }
    op {
      name: "Identity"
      input_arg {
        name: "input"
        type_attr: "T"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
      }
    }
    op {
      name: "MatMul"
      input_arg {
        name: "a"
        type_attr: "T"
      }
      input_arg {
        name: "b"
        type_attr: "T"
      }
      output_arg {
        name: "product"
        type_attr: "T"
      }
      attr {
        name: "transpose_a"
        type: "bool"
        default_value {
          b: false
        }
      }
      attr {
        name: "transpose_b"
        type: "bool"
        default_value {
          b: false
        }
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
    }
    op {
      name: "Maximum"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      input_arg {
        name: "y"
        type_attr: "T"
      }
      output_arg {
        name: "z"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
      is_commutative: true
    }
    op {
      name: "Mean"
      input_arg {
        name: "input"
        type_attr: "T"
      }
      input_arg {
        name: "reduction_indices"
        type_attr: "Tidx"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "keep_dims"
        type: "bool"
        default_value {
          b: false
        }
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_UINT8
            type: DT_INT16
            type: DT_INT8
            type: DT_COMPLEX64
            type: DT_INT64
            type: DT_QINT8
            type: DT_QUINT8
            type: DT_QINT32
            type: DT_BFLOAT16
            type: DT_UINT16
            type: DT_COMPLEX128
            type: DT_HALF
            type: DT_UINT32
            type: DT_UINT64
          }
        }
      }
      attr {
        name: "Tidx"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "Mul"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      input_arg {
        name: "y"
        type_attr: "T"
      }
      output_arg {
        name: "z"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_UINT8
            type: DT_INT8
            type: DT_UINT16
            type: DT_INT16
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
      is_commutative: true
    }
    op {
      name: "Neg"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      output_arg {
        name: "y"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
    }
    op {
      name: "NoOp"
    }
    op {
      name: "Placeholder"
      output_arg {
        name: "output"
        type_attr: "dtype"
      }
      attr {
        name: "dtype"
        type: "type"
      }
      attr {
        name: "shape"
        type: "shape"
        default_value {
          shape {
            unknown_rank: true
          }
        }
      }
    }
    op {
      name: "Prod"
      input_arg {
        name: "input"
        type_attr: "T"
      }
      input_arg {
        name: "reduction_indices"
        type_attr: "Tidx"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "keep_dims"
        type: "bool"
        default_value {
          b: false
        }
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_UINT8
            type: DT_INT16
            type: DT_INT8
            type: DT_COMPLEX64
            type: DT_INT64
            type: DT_QINT8
            type: DT_QUINT8
            type: DT_QINT32
            type: DT_BFLOAT16
            type: DT_UINT16
            type: DT_COMPLEX128
            type: DT_HALF
            type: DT_UINT32
            type: DT_UINT64
          }
        }
      }
      attr {
        name: "Tidx"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "ReadVariableOp"
      input_arg {
        name: "resource"
        type: DT_RESOURCE
      }
      output_arg {
        name: "value"
        type_attr: "dtype"
      }
      attr {
        name: "dtype"
        type: "type"
      }
      is_stateful: true
    }
    op {
      name: "RealDiv"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      input_arg {
        name: "y"
        type_attr: "T"
      }
      output_arg {
        name: "z"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_UINT8
            type: DT_INT8
            type: DT_UINT16
            type: DT_INT16
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
    }
    op {
      name: "Reshape"
      input_arg {
        name: "tensor"
        type_attr: "T"
      }
      input_arg {
        name: "shape"
        type_attr: "Tshape"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
      }
      attr {
        name: "Tshape"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "ResourceApplyAdagrad"
      input_arg {
        name: "var"
        type: DT_RESOURCE
      }
      input_arg {
        name: "accum"
        type: DT_RESOURCE
      }
      input_arg {
        name: "lr"
        type_attr: "T"
      }
      input_arg {
        name: "grad"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_UINT8
            type: DT_INT16
            type: DT_INT8
            type: DT_COMPLEX64
            type: DT_INT64
            type: DT_QINT8
            type: DT_QUINT8
            type: DT_QINT32
            type: DT_BFLOAT16
            type: DT_UINT16
            type: DT_COMPLEX128
            type: DT_HALF
            type: DT_UINT32
            type: DT_UINT64
          }
        }
      }
      attr {
        name: "use_locking"
        type: "bool"
        default_value {
          b: false
        }
      }
      is_stateful: true
    }
    op {
      name: "RestoreV2"
      input_arg {
        name: "prefix"
        type: DT_STRING
      }
      input_arg {
        name: "tensor_names"
        type: DT_STRING
      }
      input_arg {
        name: "shape_and_slices"
        type: DT_STRING
      }
      output_arg {
        name: "tensors"
        type_list_attr: "dtypes"
      }
      attr {
        name: "dtypes"
        type: "list(type)"
        has_minimum: true
        minimum: 1
      }
      is_stateful: true
    }
    op {
      name: "SaveV2"
      input_arg {
        name: "prefix"
        type: DT_STRING
      }
      input_arg {
        name: "tensor_names"
        type: DT_STRING
      }
      input_arg {
        name: "shape_and_slices"
        type: DT_STRING
      }
      input_arg {
        name: "tensors"
        type_list_attr: "dtypes"
      }
      attr {
        name: "dtypes"
        type: "list(type)"
        has_minimum: true
        minimum: 1
      }
      is_stateful: true
    }
    op {
      name: "Shape"
      input_arg {
        name: "input"
        type_attr: "T"
      }
      output_arg {
        name: "output"
        type_attr: "out_type"
      }
      attr {
        name: "T"
        type: "type"
      }
      attr {
        name: "out_type"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "Square"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      output_arg {
        name: "y"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
    }
    op {
      name: "Sub"
      input_arg {
        name: "x"
        type_attr: "T"
      }
      input_arg {
        name: "y"
        type_attr: "T"
      }
      output_arg {
        name: "z"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_BFLOAT16
            type: DT_HALF
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_UINT8
            type: DT_INT8
            type: DT_UINT16
            type: DT_INT16
            type: DT_INT32
            type: DT_INT64
            type: DT_COMPLEX64
            type: DT_COMPLEX128
          }
        }
      }
    }
    op {
      name: "Sum"
      input_arg {
        name: "input"
        type_attr: "T"
      }
      input_arg {
        name: "reduction_indices"
        type_attr: "Tidx"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "keep_dims"
        type: "bool"
        default_value {
          b: false
        }
      }
      attr {
        name: "T"
        type: "type"
        allowed_values {
          list {
            type: DT_FLOAT
            type: DT_DOUBLE
            type: DT_INT32
            type: DT_UINT8
            type: DT_INT16
            type: DT_INT8
            type: DT_COMPLEX64
            type: DT_INT64
            type: DT_QINT8
            type: DT_QUINT8
            type: DT_QINT32
            type: DT_BFLOAT16
            type: DT_UINT16
            type: DT_COMPLEX128
            type: DT_HALF
            type: DT_UINT32
            type: DT_UINT64
          }
        }
      }
      attr {
        name: "Tidx"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "Tile"
      input_arg {
        name: "input"
        type_attr: "T"
      }
      input_arg {
        name: "multiples"
        type_attr: "Tmultiples"
      }
      output_arg {
        name: "output"
        type_attr: "T"
      }
      attr {
        name: "T"
        type: "type"
      }
      attr {
        name: "Tmultiples"
        type: "type"
        default_value {
          type: DT_INT32
        }
        allowed_values {
          list {
            type: DT_INT32
            type: DT_INT64
          }
        }
      }
    }
    op {
      name: "VarHandleOp"
      output_arg {
        name: "resource"
        type: DT_RESOURCE
      }
      attr {
        name: "container"
        type: "string"
        default_value {
          s: ""
        }
      }
      attr {
        name: "shared_name"
        type: "string"
        default_value {
          s: ""
        }
      }
      attr {
        name: "dtype"
        type: "type"
      }
      attr {
        name: "shape"
        type: "shape"
      }
      is_stateful: true
    }
    op {
      name: "VarIsInitializedOp"
      input_arg {
        name: "resource"
        type: DT_RESOURCE
      }
      output_arg {
        name: "is_initialized"
        type: DT_BOOL
      }
      is_stateful: true
    }
  }
  tensorflow_version: "1.8.0"
  tensorflow_git_version: "v1.8.0-0-g93bc2e2072"
}
graph_def {
  node {
    name: "p2s_input"
    op: "Placeholder"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: -1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_output"
    op: "Placeholder"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: -1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Initializer/zeros"
    op: "Const"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_DOUBLE
          tensor_shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
          double_val: 0.0
        }
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w"
    op: "VarHandleOp"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "container"
      value {
        s: ""
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: 1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "shared_name"
      value {
        s: "p2s_weights_w"
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/IsInitialized/VarIsInitializedOp"
    op: "VarIsInitializedOp"
    input: "p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Assign"
    op: "AssignVariableOp"
    input: "p2s_weights_w"
    input: "p2s_weights_w/Initializer/zeros"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "p2s_weights_w/Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Initializer/zeros"
    op: "Const"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_DOUBLE
          tensor_shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
          double_val: 0.0
        }
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b"
    op: "VarHandleOp"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "container"
      value {
        s: ""
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: 1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "shared_name"
      value {
        s: "p2s_weights_b"
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/IsInitialized/VarIsInitializedOp"
    op: "VarIsInitializedOp"
    input: "p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Assign"
    op: "AssignVariableOp"
    input: "p2s_weights_b"
    input: "p2s_weights_b/Initializer/zeros"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "p2s_weights_b/Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "MatMul/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "MatMul"
    op: "MatMul"
    input: "p2s_input"
    input: "MatMul/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "transpose_b"
      value {
        b: false
      }
    }
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "transpose_a"
      value {
        b: false
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "add/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "add"
    op: "Add"
    input: "MatMul"
    input: "add/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "sub"
    op: "Sub"
    input: "add"
    input: "p2s_output"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "Square"
    op: "Square"
    input: "sub"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "Const"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
              size: 2
            }
          }
          tensor_content: "\000\000\000\000\001\000\000\000"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_loss"
    op: "Mean"
    input: "Square"
    input: "Const"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/Shape"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
            }
          }
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/grad_ys_0"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_DOUBLE
          tensor_shape {
          }
          double_val: 1.0
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/Fill"
    op: "Fill"
    input: "gradients/Shape"
    input: "gradients/grad_ys_0"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "index_type"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Reshape/shape"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
              size: 2
            }
          }
          tensor_content: "\001\000\000\000\001\000\000\000"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Reshape"
    op: "Reshape"
    input: "gradients/Fill"
    input: "gradients/p2s_loss_grad/Reshape/shape"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tshape"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Shape"
    op: "Shape"
    input: "Square"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "out_type"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Tile"
    op: "Tile"
    input: "gradients/p2s_loss_grad/Reshape"
    input: "gradients/p2s_loss_grad/Shape"
    device: "/device:CPU:0"
    attr {
      key: "Tmultiples"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Shape_1"
    op: "Shape"
    input: "Square"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "out_type"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Shape_2"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
            }
          }
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Const"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
              size: 1
            }
          }
          int_val: 0
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Prod"
    op: "Prod"
    input: "gradients/p2s_loss_grad/Shape_1"
    input: "gradients/p2s_loss_grad/Const"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Const_1"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
              size: 1
            }
          }
          int_val: 0
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Prod_1"
    op: "Prod"
    input: "gradients/p2s_loss_grad/Shape_2"
    input: "gradients/p2s_loss_grad/Const_1"
    device: "/device:CPU:0"
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "T"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Maximum/y"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
          }
          int_val: 1
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Maximum"
    op: "Maximum"
    input: "gradients/p2s_loss_grad/Prod_1"
    input: "gradients/p2s_loss_grad/Maximum/y"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/floordiv"
    op: "FloorDiv"
    input: "gradients/p2s_loss_grad/Prod"
    input: "gradients/p2s_loss_grad/Maximum"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/Cast"
    op: "Cast"
    input: "gradients/p2s_loss_grad/floordiv"
    device: "/device:CPU:0"
    attr {
      key: "SrcT"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "DstT"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/p2s_loss_grad/truediv"
    op: "RealDiv"
    input: "gradients/p2s_loss_grad/Tile"
    input: "gradients/p2s_loss_grad/Cast"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/Square_grad/Const"
    op: "Const"
    input: "^gradients/p2s_loss_grad/truediv"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_DOUBLE
          tensor_shape {
          }
          double_val: 2.0
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "gradients/Square_grad/Mul"
    op: "Mul"
    input: "sub"
    input: "gradients/Square_grad/Const"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/Square_grad/Mul_1"
    op: "Mul"
    input: "gradients/p2s_loss_grad/truediv"
    input: "gradients/Square_grad/Mul"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Shape"
    op: "Shape"
    input: "add"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "out_type"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Shape_1"
    op: "Shape"
    input: "p2s_output"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "out_type"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/BroadcastGradientArgs"
    op: "BroadcastGradientArgs"
    input: "gradients/sub_grad/Shape"
    input: "gradients/sub_grad/Shape_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
          }
          shape {
            dim {
              size: -1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Sum"
    op: "Sum"
    input: "gradients/Square_grad/Mul_1"
    input: "gradients/sub_grad/BroadcastGradientArgs"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Reshape"
    op: "Reshape"
    input: "gradients/sub_grad/Sum"
    input: "gradients/sub_grad/Shape"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tshape"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Sum_1"
    op: "Sum"
    input: "gradients/Square_grad/Mul_1"
    input: "gradients/sub_grad/BroadcastGradientArgs:1"
    device: "/device:CPU:0"
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Neg"
    op: "Neg"
    input: "gradients/sub_grad/Sum_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/Reshape_1"
    op: "Reshape"
    input: "gradients/sub_grad/Neg"
    input: "gradients/sub_grad/Shape_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tshape"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/tuple/group_deps"
    op: "NoOp"
    input: "^gradients/sub_grad/Reshape"
    input: "^gradients/sub_grad/Reshape_1"
    device: "/device:CPU:0"
  }
  node {
    name: "gradients/sub_grad/tuple/control_dependency"
    op: "Identity"
    input: "gradients/sub_grad/Reshape"
    input: "^gradients/sub_grad/tuple/group_deps"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@gradients/sub_grad/Reshape"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/sub_grad/tuple/control_dependency_1"
    op: "Identity"
    input: "gradients/sub_grad/Reshape_1"
    input: "^gradients/sub_grad/tuple/group_deps"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@gradients/sub_grad/Reshape_1"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/Shape"
    op: "Shape"
    input: "MatMul"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "out_type"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/Shape_1"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_INT32
          tensor_shape {
            dim {
              size: 2
            }
          }
          tensor_content: "\001\000\000\000\001\000\000\000"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 2
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/BroadcastGradientArgs"
    op: "BroadcastGradientArgs"
    input: "gradients/add_grad/Shape"
    input: "gradients/add_grad/Shape_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
          }
          shape {
            dim {
              size: -1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/Sum"
    op: "Sum"
    input: "gradients/sub_grad/tuple/control_dependency"
    input: "gradients/add_grad/BroadcastGradientArgs"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/Reshape"
    op: "Reshape"
    input: "gradients/add_grad/Sum"
    input: "gradients/add_grad/Shape"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tshape"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/Sum_1"
    op: "Sum"
    input: "gradients/sub_grad/tuple/control_dependency"
    input: "gradients/add_grad/BroadcastGradientArgs:1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tidx"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "keep_dims"
      value {
        b: false
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/Reshape_1"
    op: "Reshape"
    input: "gradients/add_grad/Sum_1"
    input: "gradients/add_grad/Shape_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "Tshape"
      value {
        type: DT_INT32
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/tuple/group_deps"
    op: "NoOp"
    input: "^gradients/add_grad/Reshape"
    input: "^gradients/add_grad/Reshape_1"
    device: "/device:CPU:0"
  }
  node {
    name: "gradients/add_grad/tuple/control_dependency"
    op: "Identity"
    input: "gradients/add_grad/Reshape"
    input: "^gradients/add_grad/tuple/group_deps"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@gradients/add_grad/Reshape"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/add_grad/tuple/control_dependency_1"
    op: "Identity"
    input: "gradients/add_grad/Reshape_1"
    input: "^gradients/add_grad/tuple/group_deps"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@gradients/add_grad/Reshape_1"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/MatMul_grad/MatMul"
    op: "MatMul"
    input: "gradients/add_grad/tuple/control_dependency"
    input: "MatMul/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "transpose_a"
      value {
        b: false
      }
    }
    attr {
      key: "transpose_b"
      value {
        b: true
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/MatMul_grad/MatMul_1"
    op: "MatMul"
    input: "p2s_input"
    input: "gradients/add_grad/tuple/control_dependency"
    device: "/device:CPU:0"
    attr {
      key: "transpose_a"
      value {
        b: true
      }
    }
    attr {
      key: "transpose_b"
      value {
        b: false
      }
    }
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/MatMul_grad/tuple/group_deps"
    op: "NoOp"
    input: "^gradients/MatMul_grad/MatMul"
    input: "^gradients/MatMul_grad/MatMul_1"
    device: "/device:CPU:0"
  }
  node {
    name: "gradients/MatMul_grad/tuple/control_dependency"
    op: "Identity"
    input: "gradients/MatMul_grad/MatMul"
    input: "^gradients/MatMul_grad/tuple/group_deps"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@gradients/MatMul_grad/MatMul"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: -1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "gradients/MatMul_grad/tuple/control_dependency_1"
    op: "Identity"
    input: "gradients/MatMul_grad/MatMul_1"
    input: "^gradients/MatMul_grad/tuple/group_deps"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@gradients/MatMul_grad/MatMul_1"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "Identity"
    op: "Identity"
    input: "Read/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad/Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad/Identity"
    op: "Identity"
    input: "p2s_weights_w/Adagrad/Read/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad/Initializer/Const"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_DOUBLE
          tensor_shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
          double_val: 0.1
        }
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad"
    op: "VarHandleOp"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "container"
      value {
        s: ""
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: 1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "shared_name"
      value {
        s: "p2s_weights_w/Adagrad"
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad/IsInitialized/VarIsInitializedOp"
    op: "VarIsInitializedOp"
    input: "p2s_weights_w/Adagrad"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad/Assign"
    op: "AssignVariableOp"
    input: "p2s_weights_w/Adagrad"
    input: "p2s_weights_w/Adagrad/Initializer/Const"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "p2s_weights_w/Adagrad/Read_1/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w/Adagrad"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_w/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "Read_1/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "Identity_1"
    op: "Identity"
    input: "Read_1/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad/Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad/Identity"
    op: "Identity"
    input: "p2s_weights_b/Adagrad/Read/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad/Initializer/Const"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_DOUBLE
          tensor_shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
          double_val: 0.1
        }
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad"
    op: "VarHandleOp"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "container"
      value {
        s: ""
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: 1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "shared_name"
      value {
        s: "p2s_weights_b/Adagrad"
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad/IsInitialized/VarIsInitializedOp"
    op: "VarIsInitializedOp"
    input: "p2s_weights_b/Adagrad"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad/Assign"
    op: "AssignVariableOp"
    input: "p2s_weights_b/Adagrad"
    input: "p2s_weights_b/Adagrad/Initializer/Const"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b/Adagrad/Read/ReadVariableOp"
        }
      }
    }
  }
  node {
    name: "p2s_weights_b/Adagrad/Read_1/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_b/Adagrad"
    device: "/device:CPU:0"
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_weights_b/Adagrad/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/learning_rate"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_FLOAT
          tensor_shape {
          }
          float_val: 0.5
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_FLOAT
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_w/Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_w/Identity"
    op: "Identity"
    input: "p2s_train_op/update_p2s_weights_w/Read/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_w/Cast"
    op: "Cast"
    input: "p2s_train_op/learning_rate"
    device: "/device:CPU:0"
    attr {
      key: "SrcT"
      value {
        type: DT_FLOAT
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_train_op/update_p2s_weights_w/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "DstT"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_w/ResourceApplyAdagrad"
    op: "ResourceApplyAdagrad"
    input: "p2s_weights_w"
    input: "p2s_weights_w/Adagrad"
    input: "p2s_train_op/update_p2s_weights_w/Cast"
    input: "gradients/MatMul_grad/tuple/control_dependency_1"
    device: "/device:CPU:0"
    attr {
      key: "use_locking"
      value {
        b: false
      }
    }
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_train_op/update_p2s_weights_w/Read/ReadVariableOp"
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_b/Read/ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_b/Identity"
    op: "Identity"
    input: "p2s_train_op/update_p2s_weights_b/Read/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_b/Cast"
    op: "Cast"
    input: "p2s_train_op/learning_rate"
    device: "/device:CPU:0"
    attr {
      key: "SrcT"
      value {
        type: DT_FLOAT
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_train_op/update_p2s_weights_b/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "DstT"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "p2s_train_op/update_p2s_weights_b/ResourceApplyAdagrad"
    op: "ResourceApplyAdagrad"
    input: "p2s_weights_b"
    input: "p2s_weights_b/Adagrad"
    input: "p2s_train_op/update_p2s_weights_b/Cast"
    input: "gradients/add_grad/tuple/control_dependency_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@p2s_train_op/update_p2s_weights_b/Read/ReadVariableOp"
        }
      }
    }
    attr {
      key: "use_locking"
      value {
        b: false
      }
    }
  }
  node {
    name: "p2s_train_op"
    op: "NoOp"
    input: "^p2s_train_op/update_p2s_weights_b/ResourceApplyAdagrad"
    input: "^p2s_train_op/update_p2s_weights_w/ResourceApplyAdagrad"
    device: "/device:CPU:0"
  }
  node {
    name: "init"
    op: "NoOp"
    input: "^p2s_weights_b/Adagrad/Assign"
    input: "^p2s_weights_b/Assign"
    input: "^p2s_weights_w/Adagrad/Assign"
    input: "^p2s_weights_w/Assign"
    device: "/device:CPU:0"
  }
  node {
    name: "save/Const"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_STRING
          tensor_shape {
          }
          string_val: "model"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_STRING
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "save/SaveV2/tensor_names"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_STRING
          tensor_shape {
            dim {
              size: 4
            }
          }
          string_val: "p2s_weights_b"
          string_val: "p2s_weights_b/Adagrad"
          string_val: "p2s_weights_w"
          string_val: "p2s_weights_w/Adagrad"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_STRING
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 4
            }
          }
        }
      }
    }
  }
  node {
    name: "save/SaveV2/shape_and_slices"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_STRING
      }
    }
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_STRING
          tensor_shape {
            dim {
              size: 4
            }
          }
          string_val: ""
          string_val: ""
          string_val: ""
          string_val: ""
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 4
            }
          }
        }
      }
    }
  }
  node {
    name: "save/SaveV2"
    op: "SaveV2"
    input: "save/Const"
    input: "save/SaveV2/tensor_names"
    input: "save/SaveV2/shape_and_slices"
    input: "p2s_weights_b/Read/ReadVariableOp"
    input: "p2s_weights_b/Adagrad/Read_1/ReadVariableOp"
    input: "p2s_weights_w/Read/ReadVariableOp"
    input: "p2s_weights_w/Adagrad/Read_1/ReadVariableOp"
    device: "/device:CPU:0"
    attr {
      key: "dtypes"
      value {
        list {
          type: DT_DOUBLE
          type: DT_DOUBLE
          type: DT_DOUBLE
          type: DT_DOUBLE
        }
      }
    }
  }
  node {
    name: "save/control_dependency"
    op: "Identity"
    input: "save/Const"
    input: "^save/SaveV2"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_STRING
      }
    }
    attr {
      key: "_class"
      value {
        list {
          s: "loc:@save/Const"
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
          }
        }
      }
    }
  }
  node {
    name: "save/RestoreV2/tensor_names"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_STRING
          tensor_shape {
            dim {
              size: 4
            }
          }
          string_val: "p2s_weights_b"
          string_val: "p2s_weights_b/Adagrad"
          string_val: "p2s_weights_w"
          string_val: "p2s_weights_w/Adagrad"
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_STRING
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 4
            }
          }
        }
      }
    }
  }
  node {
    name: "save/RestoreV2/shape_and_slices"
    op: "Const"
    device: "/device:CPU:0"
    attr {
      key: "value"
      value {
        tensor {
          dtype: DT_STRING
          tensor_shape {
            dim {
              size: 4
            }
          }
          string_val: ""
          string_val: ""
          string_val: ""
          string_val: ""
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_STRING
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 4
            }
          }
        }
      }
    }
  }
  node {
    name: "save/RestoreV2"
    op: "RestoreV2"
    input: "save/Const"
    input: "save/RestoreV2/tensor_names"
    input: "save/RestoreV2/shape_and_slices"
    device: "/device:CPU:0"
    attr {
      key: "dtypes"
      value {
        list {
          type: DT_DOUBLE
          type: DT_DOUBLE
          type: DT_DOUBLE
          type: DT_DOUBLE
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
          shape {
            unknown_rank: true
          }
          shape {
            unknown_rank: true
          }
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "save/Identity"
    op: "Identity"
    input: "save/RestoreV2"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "save/AssignVariableOp"
    op: "AssignVariableOp"
    input: "p2s_weights_b"
    input: "save/Identity"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "save/Identity_1"
    op: "Identity"
    input: "save/RestoreV2:1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "save/AssignVariableOp_1"
    op: "AssignVariableOp"
    input: "p2s_weights_b/Adagrad"
    input: "save/Identity_1"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "save/Identity_2"
    op: "Identity"
    input: "save/RestoreV2:2"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "save/AssignVariableOp_2"
    op: "AssignVariableOp"
    input: "p2s_weights_w"
    input: "save/Identity_2"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "save/Identity_3"
    op: "Identity"
    input: "save/RestoreV2:3"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            unknown_rank: true
          }
        }
      }
    }
  }
  node {
    name: "save/AssignVariableOp_3"
    op: "AssignVariableOp"
    input: "p2s_weights_w/Adagrad"
    input: "save/Identity_3"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "save/restore_all"
    op: "NoOp"
    input: "^save/AssignVariableOp"
    input: "^save/AssignVariableOp_1"
    input: "^save/AssignVariableOp_2"
    input: "^save/AssignVariableOp_3"
    device: "/device:CPU:0"
  }
  node {
    name: "placeholder_p2s_weights_w"
    op: "Placeholder"
    device: "/device:CPU:0"
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: 1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "AssignOp_p2s_weights_w"
    op: "AssignVariableOp"
    input: "p2s_weights_w"
    input: "placeholder_p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "ReadVariableOp"
    op: "ReadVariableOp"
    input: "p2s_weights_w"
    input: "^AssignOp_p2s_weights_w"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "exported_gradient_p2s_weights_w"
    op: "Identity"
    input: "gradients/MatMul_grad/tuple/control_dependency_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "placeholder_p2s_weights_b"
    op: "Placeholder"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "shape"
      value {
        shape {
          dim {
            size: 1
          }
          dim {
            size: 1
          }
        }
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "AssignOp_p2s_weights_b"
    op: "AssignVariableOp"
    input: "p2s_weights_b"
    input: "placeholder_p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
  }
  node {
    name: "ReadVariableOp_1"
    op: "ReadVariableOp"
    input: "p2s_weights_b"
    input: "^AssignOp_p2s_weights_b"
    device: "/device:CPU:0"
    attr {
      key: "dtype"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  node {
    name: "exported_gradient_p2s_weights_b"
    op: "Identity"
    input: "gradients/add_grad/tuple/control_dependency_1"
    device: "/device:CPU:0"
    attr {
      key: "T"
      value {
        type: DT_DOUBLE
      }
    }
    attr {
      key: "_output_shapes"
      value {
        list {
          shape {
            dim {
              size: 1
            }
            dim {
              size: 1
            }
          }
        }
      }
    }
  }
  versions {
    producer: 26
  }
}
saver_def {
  filename_tensor_name: "save/Const:0"
  save_tensor_name: "save/control_dependency:0"
  restore_op_name: "save/restore_all"
  max_to_keep: 5
  keep_checkpoint_every_n_hours: 10000.0
  version: V2
}
collection_def {
  key: "trainable_variables"
  value {
    bytes_list {
      value: "\n\017p2s_weights_w:0\022\024p2s_weights_w/Assign(\0012!p2s_weights_w/Initializer/zeros:0"
      value: "\n\017p2s_weights_b:0\022\024p2s_weights_b/Assign(\0012!p2s_weights_b/Initializer/zeros:0"
    }
  }
}
collection_def {
  key: "variables"
  value {
    bytes_list {
      value: "\n\017p2s_weights_w:0\022\024p2s_weights_w/Assign(\0012!p2s_weights_w/Initializer/zeros:0"
      value: "\n\017p2s_weights_b:0\022\024p2s_weights_b/Assign(\0012!p2s_weights_b/Initializer/zeros:0"
      value: "\n\027p2s_weights_w/Adagrad:0\022\034p2s_weights_w/Adagrad/Assign(\0012)p2s_weights_w/Adagrad/Initializer/Const:0"
      value: "\n\027p2s_weights_b/Adagrad:0\022\034p2s_weights_b/Adagrad/Assign(\0012)p2s_weights_b/Adagrad/Initializer/Const:0"
    }
  }
}
collection_def {
  key: "train_op"
  value {
    node_list {
      value: "p2s_train_op"
    }
  }
}
