private IEnumerator Generate2() { Debug.Log("Generate2"); var nodes = (from node in FindObjectsOfType <BaseNode>() where node.gameObject.layer == 0 select node).ToArray(); yield return(null); StringBuilder script = new StringBuilder(); script.AppendLine("command = TrainConvNet"); script.AppendLine("makeMode = false ; traceLevel = 0; deviceId = \"auto\""); script.AppendLine("rootDir = \".\"; dataDir = \"$rootDir$\"; modelDir = \"$rootDir$/Models\""); script.AppendLine("modelPath = \"$modelDir$/test.cmf\""); script.AppendLine("TrainConvNet = {"); script.AppendLine("\taction = \"train\""); script.AppendLine("\tBrainScriptNetworkBuilder = {"); InputNode reader = null; StringBuilder model = new StringBuilder(); string ce = string.Empty; string errs = string.Empty; model.AppendLine("model(features) = {"); foreach (var node in nodes) { if (node.Last.Count == 0 && node.Next.Count == 0) { continue; } if (node.Last.Count == 0 && node is InputNode) { reader = node as InputNode; } else if (node is EvaluationNode) { errs = string.Format("errs = {0} ({1}, {2})", node.GetParameters(), "labels", "z"); } else if (node is CriterionNode) { ce = string.Format("ce = {0} ({1}, {2})", node.GetParameters(), "labels", "z"); } else { string layerParam = node.GetParameters(); StringBuilder convLast = new StringBuilder(); if (node.Last.Count > 0) { if (node.Last[0] is InputNode) { convLast.Append("features"); } else { convLast.Append(node.Last[0].ShortName); } for (int i = 1; i < node.Last.Count; i++) { if (node.Last[i] is InputNode) { convLast.Append(", features"); continue; } else { convLast.AppendFormat(", {0}", node.Last[i].ShortName); } } } model.AppendFormat("{0} = {1}{{ {2} }}({3}){4}", node.ShortName, node.GetType().Name, layerParam, convLast.ToString(), Environment.NewLine); } yield return(null); } script.AppendLine(model.ToString() + "}.z"); script.AppendFormat("\t{0}{1}", reader?.GetFeatures(), Environment.NewLine); script.AppendFormat("\t{0}{1}", reader?.GetLabels(), Environment.NewLine); script.AppendLine("\tz = model (features)"); script.AppendLine(ce); script.AppendLine(errs); script.AppendLine("\tfeaturesNodes = (features)"); script.AppendLine("\tlabelNodes = (labels)"); script.AppendLine("\tcriterionNodes = (ce)"); script.AppendLine("\tevaluationNodes = (errs)"); script.AppendLine("\toutputNodes = (z)"); script.AppendLine("}"); script.AppendLine("reader = {"); script.AppendLine(reader?.GetParameters()); script.AppendLine("}"); script.Append("}"); yield return(null); Debug.Log("Generate complate"); //Debug.Log(script.ToString()); codeScreen.GetComponentInChildren <TMPro.TextMeshPro>().text = script.ToString(); generating = false; }