Esempio n. 1
0
        public DataSetMnist(NDArray images, NDArray labels, TF_DataType dtype, bool reshape)
        {
            num_examples = images.shape[0];
            images       = images.reshape(images.shape[0], images.shape[1] * images.shape[2]);
            images.astype(dtype.as_numpy_datatype());
            images = np.multiply(images, 1.0f / 255.0f);

            labels.astype(dtype.as_numpy_datatype());

            data             = images;
            this.labels      = labels;
            epochs_completed = 0;
            index_in_epoch   = 0;
        }
Esempio n. 2
0
        private static Tensor size_internal(Tensor input, string name = null, bool optimize = true, TF_DataType out_type = TF_DataType.TF_INT32)
        {
            return(with(ops.name_scope(name, "Size", new Tensor[] { input }), scope =>
            {
                name = scope;

                if (!tf.context.executing_eagerly())
                {
                    var input_tensor = ops.convert_to_tensor(input);
                    var input_shape = tensor_util.to_shape(input_tensor.shape);
                    if (optimize)
                    {
                        if (input_shape.is_fully_defined())
                        {
                            var nd = np.array(input_tensor.shape, out_type.as_numpy_datatype());
                            return constant_op.constant(nd, name: name);
                        }
                    }

                    return gen_array_ops.size(input, name: name, out_type: out_type);
                }
                else
                {
                    // result = gen_array_ops.shape();
                    throw new NotImplementedException("array_ops.size_internal");
                }

                return null;
            }));
        }
Esempio n. 3
0
        private static Tensor shape_internal(Tensor input, string name = null, bool optimize = true, TF_DataType out_type = TF_DataType.TF_INT32)
        {
            return(with(ops.name_scope(name, "Shape", new { input }), scope =>
            {
                name = scope;

                if (!tf.context.executing_eagerly())
                {
                    var input_tensor = ops.convert_to_tensor(input);
                    var input_shape = tensor_util.to_shape(input_tensor.shape);
                    if (optimize && input_tensor.NDims > -1 && input_shape.is_fully_defined())
                    {
                        var nd = np.array(input_tensor.shape, out_type.as_numpy_datatype());
                        return constant_op.constant(nd, name: name);
                    }
                }

                return gen_array_ops.shape(input, name: name, out_type: out_type);
            }));
        }
Esempio n. 4
0
        /// <summary>
        /// Create a TensorProto.
        /// </summary>
        /// <param name="values"></param>
        /// <param name="dtype"></param>
        /// <param name="shape"></param>
        /// <param name="verify_shape"></param>
        /// <param name="allow_broadcast"></param>
        /// <returns></returns>
        public static TensorProto make_tensor_proto(object values, TF_DataType dtype = TF_DataType.DtInvalid, int[] shape = null, bool verify_shape = false, bool allow_broadcast = false)
        {
            if (allow_broadcast && verify_shape)
            {
                throw new ValueError("allow_broadcast and verify_shape are not both allowed.");
            }
            if (values is TensorProto tp)
            {
                return(tp);
            }

            if (dtype != TF_DataType.DtInvalid)
            {
                ;
            }

            bool is_quantized = new TF_DataType[]
            {
                TF_DataType.TF_QINT8, TF_DataType.TF_QUINT8, TF_DataType.TF_QINT16, TF_DataType.TF_QUINT16,
                TF_DataType.TF_QINT32
            }.Contains(dtype);

            // We first convert value to a numpy array or scalar.
            NDArray nparray = null;
            var     np_dt   = dtype.as_numpy_datatype();

            if (values is NDArray nd)
            {
                nparray = nd;
            }
            else
            {
                if (values == null)
                {
                    throw new ValueError("None values not supported.");
                }

                if (np_dt == null)
                {
                    switch (values)
                    {
                    case bool boolVal:
                        nparray = boolVal;
                        break;

                    case int intVal:
                        nparray = intVal;
                        break;

                    case int[] intVals:
                        nparray = np.array(intVals);
                        break;

                    case int[,] intVals:
                        nparray = np.array(intVals);
                        break;

                    case long intVal:
                        nparray = intVal;
                        break;

                    case long[] intVals:
                        nparray = np.array(intVals);
                        break;

                    case long[,] intVals:
                        nparray = np.array(intVals);
                        break;

                    case float floatVal:
                        nparray = floatVal;
                        break;

                    case float[] floatVals:
                        nparray = floatVals;
                        break;

                    case float[,] floatVals:
                        nparray = np.array(floatVals);
                        break;

                    case double doubleVal:
                        nparray = doubleVal;
                        break;

                    case double[] doubleVals:
                        nparray = np.array(doubleVals);
                        break;

                    case double[,] doubleVals:
                        nparray = np.array(doubleVals);
                        break;

                    case string strVal:
                        nparray = strVal;
                        break;

                    case string[] strVals:
                        nparray = strVals;
                        break;

                    case byte[] byteValues:
                        nparray = byteValues;
                        break;

                    case byte[,] byteValues:
                        nparray = np.array(byteValues);
                        break;

                    default:
                        throw new NotImplementedException($"make_tensor_proto: Support for type {values.GetType()} Not Implemented");
                    }
                }
                else
                {
                    // convert data type
                    switch (np_dt.Name)
                    {
                    case "Int32":
                        if (values.GetType().IsArray)
                        {
                            nparray = np.array((int[])values, np_dt);
                        }
                        else
                        {
                            nparray = Convert.ToInt32(values);
                        }
                        break;

                    case "Int64":
                        if (values.GetType().IsArray)
                        {
                            nparray = np.array((int[])values, np_dt);
                        }
                        else
                        {
                            nparray = Convert.ToInt64(values);
                        }
                        break;

                    case "Single":
                        if (values.GetType().IsArray)
                        {
                            nparray = np.array((float[])values, np_dt);
                        }
                        else
                        {
                            nparray = Convert.ToSingle(values);
                        }
                        break;

                    case "Double":
                        if (values.GetType().IsArray)
                        {
                            nparray = np.array((double[])values, np_dt);
                        }
                        else
                        {
                            nparray = Convert.ToDouble(values);
                        }
                        break;

                    case "String":
                        if (values.GetType().IsArray)
                        {
                            nparray = np.array((string[])values, np_dt);
                        }
                        else
                        {
                            nparray = Convert.ToString(values);
                        }
                        break;

                    default:
                        throw new NotImplementedException($"make_tensor_proto: Support for type {np_dt.Name} Not Implemented");
                    }
                }
            }

            var numpy_dtype = dtypes.as_dtype(nparray.dtype);

            if (numpy_dtype == TF_DataType.DtInvalid)
            {
                throw new TypeError($"Unrecognized data type: {nparray.dtype}");
            }

            // If dtype was specified and is a quantized type, we convert
            // numpy_dtype back into the quantized version.
            if (is_quantized)
            {
                numpy_dtype = dtype;
            }

            bool is_same_size = false;
            int  shape_size   = 0;

            // If shape is not given, get the shape from the numpy array.
            if (shape == null)
            {
                shape        = nparray.shape;
                is_same_size = true;
                shape_size   = nparray.size;
            }
            else
            {
                shape_size   = new TensorShape(shape).Size;
                is_same_size = shape_size == nparray.size;
            }

            var tensor_proto = new TensorProto
            {
                Dtype       = numpy_dtype.as_datatype_enum(),
                TensorShape = tensor_util.as_shape(shape)
            };

            if (is_same_size && _TENSOR_CONTENT_TYPES.Contains(numpy_dtype) && shape_size > 1)
            {
                byte[] bytes = nparray.ToByteArray();
                tensor_proto.TensorContent = Google.Protobuf.ByteString.CopyFrom(bytes.ToArray());
                return(tensor_proto);
            }

            if (numpy_dtype == TF_DataType.TF_STRING && !(values is NDArray))
            {
                if (values is string str)
                {
                    tensor_proto.StringVal.Add(Google.Protobuf.ByteString.CopyFromUtf8(str));
                }
                else if (values is string[] str_values)
                {
                    tensor_proto.StringVal.AddRange(str_values.Select(x => Google.Protobuf.ByteString.CopyFromUtf8(x)));
                }
                else if (values is byte[] byte_values)
                {
                    tensor_proto.TensorContent = Google.Protobuf.ByteString.CopyFrom(byte_values);
                }

                return(tensor_proto);
            }

            var proto_values = nparray.ravel();

            switch (nparray.dtype.Name)
            {
            case "Bool":
            case "Boolean":
                tensor_proto.BoolVal.AddRange(proto_values.Data <bool>());
                break;

            case "Int32":
                tensor_proto.IntVal.AddRange(proto_values.Data <int>());
                break;

            case "Int64":
                tensor_proto.Int64Val.AddRange(proto_values.Data <long>());
                break;

            case "Single":
                tensor_proto.FloatVal.AddRange(proto_values.Data <float>());
                break;

            case "Double":
                tensor_proto.DoubleVal.AddRange(proto_values.Data <double>());
                break;

            case "String":
                tensor_proto.StringVal.AddRange(proto_values.Data <string>().Select(x => Google.Protobuf.ByteString.CopyFromUtf8(x.ToString())));
                break;

            default:
                throw new Exception("make_tensor_proto Not Implemented");
            }

            return(tensor_proto);
        }
Esempio n. 5
0
 public NDArray cast_to_floatx(NDArray x) => np.array(x, dtype: _FLOATX.as_numpy_datatype());