/// <inheritdoc /> protected override void DecideAction() { if (_isControlled) { agentInfos.Clear(); return; } var currentBatchSize = agentInfos.Count(); if (currentBatchSize == 0) { return; } #if ENABLE_TENSORFLOW if (_engine == null) { Debug.LogError($"No model was present for the Brain {name}."); return; } // Prepare the input tensors to be feed into the engine _tensorGenerator.GenerateTensors(_inferenceInputs, currentBatchSize, agentInfos); // Prepare the output tensors to be feed into the engine _tensorGenerator.GenerateTensors(_inferenceOutputs, currentBatchSize, agentInfos); // Execute the Model Profiler.BeginSample($"MLAgents.{name}.ExecuteGraph"); _engine.ExecuteGraph(_inferenceInputs, _inferenceOutputs); Profiler.EndSample(); // Update the outputs _tensorApplier.ApplyTensors(_inferenceOutputs, agentInfos); #else if (agentInfos.Count > 0) { Debug.LogError(string.Format( "The brain {0} was set to inference mode but the Tensorflow library is not " + "present in the Unity project.", name)); } #endif agentInfos.Clear(); }
/// <inheritdoc /> protected override void DecideAction() { if (m_IsControlled) { m_AgentInfos.Clear(); return; } var currentBatchSize = m_AgentInfos.Count(); if (currentBatchSize == 0) { return; } Profiler.BeginSample("LearningBrain.DecideAction"); if (m_Engine == null) { Debug.LogError($"No model was present for the Brain {name}."); return; } Profiler.BeginSample($"MLAgents.{name}.GenerateTensors"); // Prepare the input tensors to be feed into the engine m_TensorGenerator.GenerateTensors(m_InferenceInputs, currentBatchSize, m_AgentInfos); Profiler.EndSample(); Profiler.BeginSample($"MLAgents.{name}.PrepareBarracudaInputs"); var inputs = PrepareBarracudaInputs(m_InferenceInputs); Profiler.EndSample(); // Execute the Model Profiler.BeginSample($"MLAgents.{name}.ExecuteGraph"); m_Engine.Execute(inputs); Profiler.EndSample(); Profiler.BeginSample($"MLAgents.{name}.FetchBarracudaOutputs"); m_InferenceOutputs = FetchBarracudaOutputs(m_OutputNames); Profiler.EndSample(); Profiler.BeginSample($"MLAgents.{name}.ApplyTensors"); // Update the outputs m_TensorApplier.ApplyTensors(m_InferenceOutputs, m_AgentInfos); Profiler.EndSample(); m_AgentInfos.Clear(); Profiler.EndSample(); }
/// <inheritdoc /> protected override void DecideAction() { // 如果是,受控制的 // 不会进行推断 // 基类中,会传给Batcher,并会传给Tensorflow if (_isControlled) { agentInfos.Clear(); return; } var currentBatchSize = agentInfos.Count(); if (currentBatchSize == 0) { return; } Profiler.BeginSample("LearningBrain.DecideAction"); #if ENABLE_TENSORFLOW if (_engine == null) { Debug.LogError($"No model was present for the Brain {name}."); return; } // Prepare the input tensors to be feed into the engine _tensorGenerator.GenerateTensors(_inferenceInputs, currentBatchSize, agentInfos); // Prepare the output tensors to be feed into the engine _tensorGenerator.GenerateTensors(_inferenceOutputs, currentBatchSize, agentInfos); // Execute the Model Profiler.BeginSample($"MLAgents.{name}.ExecuteGraph"); _engine.ExecuteGraph(_inferenceInputs, _inferenceOutputs); Profiler.EndSample(); // Update the outputs _tensorApplier.ApplyTensors(_inferenceOutputs, agentInfos); #else // Q: 这个$符号是? if (_engine == null) { Debug.LogError($"No model was present for the Brain {name}."); return; } Profiler.BeginSample($"MLAgents.{name}.GenerateTensors"); // Prepare the input tensors to be feed into the engine _tensorGenerator.GenerateTensors(_inferenceInputs, currentBatchSize, agentInfos); Profiler.EndSample(); Profiler.BeginSample($"MLAgents.{name}.PrepareBarracudaInputs"); var inputs = PrepareBarracudaInputs(_inferenceInputs); Profiler.EndSample(); // Execute the Model Profiler.BeginSample($"MLAgents.{name}.ExecuteGraph"); _engine.Execute(inputs); Profiler.EndSample(); Profiler.BeginSample($"MLAgents.{name}.FetchBarracudaOutputs"); _inferenceOutputs = FetchBarracudaOutputs(_outputNames); Profiler.EndSample(); Profiler.BeginSample($"MLAgents.{name}.ApplyTensors"); // Update the outputs _tensorApplier.ApplyTensors(_inferenceOutputs, agentInfos); Profiler.EndSample(); #endif agentInfos.Clear(); Profiler.EndSample(); }