浏览代码
C# changes for hybrid action spaces (#4587)
C# changes for hybrid action spaces (#4587)
* Add hybrid action capability flag (#4576) * Change BrainParametersProto to support ActionSpec (#4579) * Assign new BrainParametersProto fields based on capabilities (#4581) * ActionBuffer with hybrid actions for RemotePolicy (#4592) * Barracuda inference for hybrid actions (#4611) * Refactor BarracudaModel loader checks (#4629) * Export separate nodes for continuous/discrete actions (#4655) * Separate continuous/discrete actions in AgentActionProto (#4698) * Force different nodes for new and deprecated action output (#4705)/fix-conflict-base-env
GitHub
4 年前
当前提交
94c59e31
共有 63 个文件被更改,包括 4049 次插入 和 655 次删除
-
6com.unity.ml-agents/Runtime/Academy.cs
-
8com.unity.ml-agents/Runtime/Actuators/ActionSegment.cs
-
3com.unity.ml-agents/Runtime/Actuators/ActionSpec.cs
-
4com.unity.ml-agents/Runtime/Actuators/ActuatorManager.cs
-
97com.unity.ml-agents/Runtime/Actuators/IActionReceiver.cs
-
33com.unity.ml-agents/Runtime/Agent.cs
-
10com.unity.ml-agents/Runtime/Agent.deprecated.cs
-
68com.unity.ml-agents/Runtime/Communicator/GrpcExtensions.cs
-
2com.unity.ml-agents/Runtime/Communicator/ICommunicator.cs
-
12com.unity.ml-agents/Runtime/Communicator/RpcCommunicator.cs
-
8com.unity.ml-agents/Runtime/Communicator/UnityRLCapabilities.cs
-
82com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/AgentAction.cs
-
348com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/BrainParameters.cs
-
44com.unity.ml-agents/Runtime/Grpc/CommunicatorObjects/Capabilities.cs
-
44com.unity.ml-agents/Runtime/Inference/ApplierImpl.cs
-
237com.unity.ml-agents/Runtime/Inference/BarracudaModelParamLoader.cs
-
4com.unity.ml-agents/Runtime/Inference/GeneratorImpl.cs
-
12com.unity.ml-agents/Runtime/Inference/ModelRunner.cs
-
35com.unity.ml-agents/Runtime/Inference/TensorApplier.cs
-
26com.unity.ml-agents/Runtime/Inference/TensorGenerator.cs
-
15com.unity.ml-agents/Runtime/Inference/TensorNames.cs
-
20com.unity.ml-agents/Runtime/Policies/BarracudaPolicy.cs
-
14com.unity.ml-agents/Runtime/Policies/RemotePolicy.cs
-
12com.unity.ml-agents/Tests/Editor/Actuators/ActuatorManagerTests.cs
-
3com.unity.ml-agents/Tests/Editor/DemonstrationTests.cs
-
74com.unity.ml-agents/Tests/Editor/EditModeTestInternalBrainTensorApplier.cs
-
7com.unity.ml-agents/Tests/Editor/EditModeTestInternalBrainTensorGenerator.cs
-
62com.unity.ml-agents/Tests/Editor/ModelRunnerTest.cs
-
212com.unity.ml-agents/Tests/Editor/ParameterLoaderTest.cs
-
2com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated.nn.meta
-
2com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated.nn.meta
-
22ml-agents-envs/mlagents_envs/communicator_objects/agent_action_pb2.py
-
12ml-agents-envs/mlagents_envs/communicator_objects/agent_action_pb2.pyi
-
82ml-agents-envs/mlagents_envs/communicator_objects/brain_parameters_pb2.py
-
45ml-agents-envs/mlagents_envs/communicator_objects/brain_parameters_pb2.pyi
-
13ml-agents-envs/mlagents_envs/communicator_objects/capabilities_pb2.py
-
6ml-agents-envs/mlagents_envs/communicator_objects/capabilities_pb2.pyi
-
21ml-agents-envs/mlagents_envs/environment.py
-
18ml-agents-envs/mlagents_envs/mock_communicator.py
-
21ml-agents-envs/mlagents_envs/rpc_utils.py
-
33ml-agents-envs/mlagents_envs/tests/test_rpc_utils.py
-
14ml-agents/mlagents/trainers/demo_loader.py
-
19ml-agents/mlagents/trainers/tests/simple_test_envs.py
-
8ml-agents/mlagents/trainers/tests/tensorflow/test_simple_rl.py
-
18ml-agents/mlagents/trainers/tests/torch/test_simple_rl.py
-
28ml-agents/mlagents/trainers/torch/action_model.py
-
31ml-agents/mlagents/trainers/torch/model_serialization.py
-
43ml-agents/mlagents/trainers/torch/networks.py
-
4protobuf-definitions/proto/mlagents_envs/communicator_objects/agent_action.proto
-
14protobuf-definitions/proto/mlagents_envs/communicator_objects/brain_parameters.proto
-
3protobuf-definitions/proto/mlagents_envs/communicator_objects/capabilities.proto
-
360com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs
-
11com.unity.ml-agents/Runtime/Inference/BarracudaModelExtensions.cs.meta
-
1001com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action.onnx
-
14com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action.onnx.meta
-
867com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr.onnx
-
14com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr.onnx.meta
-
462com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction.onnx
-
14com.unity.ml-agents/Tests/Editor/TestModels/hybrid0vis53vec_3c_2daction.onnx.meta
-
0/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated.nn
-
0/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated.nn
-
0/com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action_deprecated.nn.meta
-
0/com.unity.ml-agents/Tests/Editor/TestModels/discrete1vis0vec_2_3action_recurr_deprecated.nn.meta
|
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using Unity.Barracuda; |
|||
|
|||
namespace Unity.MLAgents.Inference |
|||
{ |
|||
/// <summary>
|
|||
/// Barracuda Model extension methods.
|
|||
/// </summary>
|
|||
internal static class BarracudaModelExtensions |
|||
{ |
|||
/// <summary>
|
|||
/// Get array of the input tensor names of the model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Array of the input tensor names of the model</returns>
|
|||
public static string[] GetInputNames(this Model model) |
|||
{ |
|||
var names = new List<string>(); |
|||
|
|||
if (model == null) |
|||
return names.ToArray(); |
|||
|
|||
foreach (var input in model.inputs) |
|||
{ |
|||
names.Add(input.name); |
|||
} |
|||
|
|||
foreach (var mem in model.memories) |
|||
{ |
|||
names.Add(mem.input); |
|||
} |
|||
|
|||
names.Sort(); |
|||
|
|||
return names.ToArray(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Generates the Tensor inputs that are expected to be present in the Model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>TensorProxy IEnumerable with the expected Tensor inputs.</returns>
|
|||
public static IReadOnlyList<TensorProxy> GetInputTensors(this Model model) |
|||
{ |
|||
var tensors = new List<TensorProxy>(); |
|||
|
|||
if (model == null) |
|||
return tensors; |
|||
|
|||
foreach (var input in model.inputs) |
|||
{ |
|||
tensors.Add(new TensorProxy |
|||
{ |
|||
name = input.name, |
|||
valueType = TensorProxy.TensorType.FloatingPoint, |
|||
data = null, |
|||
shape = input.shape.Select(i => (long)i).ToArray() |
|||
}); |
|||
} |
|||
|
|||
foreach (var mem in model.memories) |
|||
{ |
|||
tensors.Add(new TensorProxy |
|||
{ |
|||
name = mem.input, |
|||
valueType = TensorProxy.TensorType.FloatingPoint, |
|||
data = null, |
|||
shape = TensorUtils.TensorShapeFromBarracuda(mem.shape) |
|||
}); |
|||
} |
|||
|
|||
tensors.Sort((el1, el2) => el1.name.CompareTo(el2.name)); |
|||
|
|||
return tensors; |
|||
} |
|||
|
|||
|
|||
/// <summary>
|
|||
/// Get number of visual observation inputs to the model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Number of visual observation inputs to the model</returns>
|
|||
public static int GetNumVisualInputs(this Model model) |
|||
{ |
|||
var count = 0; |
|||
if (model == null) |
|||
return count; |
|||
|
|||
foreach (var input in model.inputs) |
|||
{ |
|||
if (input.name.StartsWith(TensorNames.VisualObservationPlaceholderPrefix)) |
|||
{ |
|||
count++; |
|||
} |
|||
} |
|||
|
|||
return count; |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Get array of the output tensor names of the model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Array of the output tensor names of the model</returns>
|
|||
public static string[] GetOutputNames(this Model model) |
|||
{ |
|||
var names = new List<string>(); |
|||
|
|||
if (model == null) |
|||
{ |
|||
return names.ToArray(); |
|||
} |
|||
|
|||
if (model.HasContinuousOutputs()) |
|||
{ |
|||
names.Add(model.ContinuousOutputName()); |
|||
} |
|||
if (model.HasDiscreteOutputs()) |
|||
{ |
|||
names.Add(model.DiscreteOutputName()); |
|||
} |
|||
|
|||
var memory = (int)model.GetTensorByName(TensorNames.MemorySize)[0]; |
|||
if (memory > 0) |
|||
{ |
|||
foreach (var mem in model.memories) |
|||
{ |
|||
names.Add(mem.output); |
|||
} |
|||
} |
|||
|
|||
names.Sort(); |
|||
|
|||
return names.ToArray(); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Check if the model has continuous action outputs.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>True if the model has continuous action outputs.</returns>
|
|||
public static bool HasContinuousOutputs(this Model model) |
|||
{ |
|||
if (model == null) |
|||
return false; |
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] > 0; |
|||
} |
|||
else |
|||
{ |
|||
return model.outputs.Contains(TensorNames.ContinuousActionOutput) && |
|||
(int)model.GetTensorByName(TensorNames.ContinuousActionOutputShape)[0] > 0; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Continuous action output size of the model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Size of continuous action output.</returns>
|
|||
public static int ContinuousOutputSize(this Model model) |
|||
{ |
|||
if (model == null) |
|||
return 0; |
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] > 0 ? |
|||
(int)model.GetTensorByName(TensorNames.ActionOutputShapeDeprecated)[0] : 0; |
|||
} |
|||
else |
|||
{ |
|||
var continuousOutputShape = model.GetTensorByName(TensorNames.ContinuousActionOutputShape); |
|||
return continuousOutputShape == null ? 0 : (int)continuousOutputShape[0]; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Continuous action output tensor name of the model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Tensor name of continuous action output.</returns>
|
|||
public static string ContinuousOutputName(this Model model) |
|||
{ |
|||
if (model == null) |
|||
return null; |
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
return TensorNames.ActionOutputDeprecated; |
|||
} |
|||
else |
|||
{ |
|||
return TensorNames.ContinuousActionOutput; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Check if the model has discrete action outputs.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>True if the model has discrete action outputs.</returns>
|
|||
public static bool HasDiscreteOutputs(this Model model) |
|||
{ |
|||
if (model == null) |
|||
return false; |
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] == 0; |
|||
} |
|||
else |
|||
{ |
|||
return model.outputs.Contains(TensorNames.DiscreteActionOutput) && |
|||
(int)model.GetTensorByName(TensorNames.DiscreteActionOutputShape)[0] > 0; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Discrete action output size of the model. This is equal to the sum of the branch sizes.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Size of discrete action output.</returns>
|
|||
public static int DiscreteOutputSize(this Model model) |
|||
{ |
|||
if (model == null) |
|||
return 0; |
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
return (int)model.GetTensorByName(TensorNames.IsContinuousControlDeprecated)[0] > 0 ? |
|||
0 : (int)model.GetTensorByName(TensorNames.ActionOutputShapeDeprecated)[0]; |
|||
} |
|||
else |
|||
{ |
|||
var discreteOutputShape = model.GetTensorByName(TensorNames.DiscreteActionOutputShape); |
|||
return discreteOutputShape == null ? 0 : (int)discreteOutputShape[0]; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Discrete action output tensor name of the model.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>Tensor name of discrete action output.</returns>
|
|||
public static string DiscreteOutputName(this Model model) |
|||
{ |
|||
if (model == null) |
|||
return null; |
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
return TensorNames.ActionOutputDeprecated; |
|||
} |
|||
else |
|||
{ |
|||
return TensorNames.DiscreteActionOutput; |
|||
} |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Check if the model supports hybrid action spaces.
|
|||
/// If not, the model should be handled differently and use the deprecated fields.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>True if the model supports hybrid action spaces.</returns>
|
|||
public static bool HasHybridSupport(this Model model) |
|||
{ |
|||
return model == null || |
|||
model.outputs.Contains(TensorNames.ContinuousActionOutput) || |
|||
model.outputs.Contains(TensorNames.DiscreteActionOutput); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Check if the model contains all the expected input/output tensors.
|
|||
/// </summary>
|
|||
/// <param name="model">
|
|||
/// The Barracuda engine model for loading static parameters.
|
|||
/// </param>
|
|||
/// <returns>True if the model contains all the expected tensors.</returns>
|
|||
public static bool CheckExpectedTensors(this Model model, List<string> failedModelChecks) |
|||
{ |
|||
// Check the presence of model version
|
|||
var modelApiVersionTensor = model.GetTensorByName(TensorNames.VersionNumber); |
|||
if (modelApiVersionTensor == null) |
|||
{ |
|||
failedModelChecks.Add($"Required constant \"{TensorNames.VersionNumber}\" was not found in the model file."); |
|||
return false; |
|||
} |
|||
|
|||
// Check the presence of memory size
|
|||
var memorySizeTensor = model.GetTensorByName(TensorNames.MemorySize); |
|||
if (memorySizeTensor == null) |
|||
{ |
|||
failedModelChecks.Add($"Required constant \"{TensorNames.MemorySize}\" was not found in the model file."); |
|||
return false; |
|||
} |
|||
|
|||
// Check the presence of action output tensor
|
|||
if (!model.outputs.Contains(TensorNames.ActionOutputDeprecated) && |
|||
!model.outputs.Contains(TensorNames.ContinuousActionOutput) && |
|||
!model.outputs.Contains(TensorNames.DiscreteActionOutput)) |
|||
{ |
|||
failedModelChecks.Add("The model does not contain any Action Output Node."); |
|||
return false; |
|||
} |
|||
|
|||
// Check the presence of action output shape tensor
|
|||
if (!model.HasHybridSupport()) |
|||
{ |
|||
if (model.GetTensorByName(TensorNames.ActionOutputShapeDeprecated) == null) |
|||
{ |
|||
failedModelChecks.Add("The model does not contain any Action Output Shape Node."); |
|||
return false; |
|||
} |
|||
if (model.GetTensorByName(TensorNames.IsContinuousControlDeprecated) == null) |
|||
{ |
|||
failedModelChecks.Add($"Required constant \"{TensorNames.IsContinuousControlDeprecated}\" was not found in the model file. " + |
|||
"This is only required for model that uses a deprecated model format."); |
|||
return false; |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
if (model.outputs.Contains(TensorNames.ContinuousActionOutput) && |
|||
model.GetTensorByName(TensorNames.ContinuousActionOutputShape) == null) |
|||
{ |
|||
failedModelChecks.Add("The model uses continuous action but does not contain Continuous Action Output Shape Node."); |
|||
return false; |
|||
} |
|||
if (model.outputs.Contains(TensorNames.DiscreteActionOutput) && |
|||
model.GetTensorByName(TensorNames.DiscreteActionOutputShape) == null) |
|||
{ |
|||
failedModelChecks.Add("The model uses discrete action but does not contain Discrete Action Output Shape Node."); |
|||
return false; |
|||
} |
|||
} |
|||
return true; |
|||
} |
|||
} |
|||
} |
|
|||
fileFormatVersion: 2 |
|||
guid: 1193c3bef93464baca0d8ba2d6ce1754 |
|||
MonoImporter: |
|||
externalObjects: {} |
|||
serializedVersion: 2 |
|||
defaultReferences: [] |
|||
executionOrder: 0 |
|||
icon: {instanceID: 0} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
1001
com.unity.ml-agents/Tests/Editor/TestModels/continuous2vis8vec2action.onnx
文件差异内容过多而无法显示
查看文件
文件差异内容过多而无法显示
查看文件
|
|||
fileFormatVersion: 2 |
|||
guid: f90bffb60a3784a2385299a321f354a6 |
|||
ScriptedImporter: |
|||
fileIDToRecycleName: |
|||
11400000: main obj |
|||
11400002: model data |
|||
externalObjects: {} |
|||
userData: |
|||
assetBundleName: |
|||
assetBundleVariant: |
|||
script: {fileID: 11500000, guid: 683b6cb6d0a474744822c888b46772c9, type: 3} |
|||
optimizeModel: 1 |
|||
forceArbitraryBatchSize: 1 |
|||
treatErrorsAsWarnings: 0 |
|
|||
pytorch1.7:�� |
|||
� |
|||
visual_observation_0 |
|||
5network_body.visual_processors.0.conv_layers.0.weight |
|||
3network_body.visual_processors.0.conv_layers.0.bias35Conv_0"Conv* |
|||
dilations@@�* |
|||
group�* |
|||
kernel_shape@@�* |
|||
pads@ @ @ @ �* |
|||
strides@@� |
|||
1 |
|||
3536LeakyRelu_1" LeakyRelu* |
|||
alpha |
|||
�#<� |
|||
� |
|||
36 |
|||
5network_body.visual_processors.0.conv_layers.2.weight |
|||
3network_body.visual_processors.0.conv_layers.2.bias37Conv_2"Conv* |
|||
dilations@@�* |
|||
group�* |
|||
kernel_shape@@�* |
|||
pads@ @ @ @ �* |
|||
strides@@� |
|||
1 |
|||
3738LeakyRelu_3" LeakyRelu* |
|||
alpha |
|||
�#<� |
|||
>39 |
|||
Constant_4"Constant*" |
|||
value*J�������� � |
|||
|
|||
38 |
|||
3940 Reshape_5"Reshape |
|||
� |
|||
40 |
|||
/network_body.visual_processors.0.dense.0.weight |
|||
-network_body.visual_processors.0.dense.0.bias41Gemm_6"Gemm* |
|||
alpha �?�* |
|||
beta �?�* |
|||
transB� |
|||
1 |
|||
4142LeakyRelu_7" LeakyRelu* |
|||
alpha |
|||
�#<� |
|||
0 |
|||
4243Concat_8"Concat* |
|||
axis���������� |
|||
� |
|||
43 |
|||
/network_body.linear_encoder.seq_layers.0.weight |
|||
-network_body.linear_encoder.seq_layers.0.bias44Gemm_9"Gemm* |
|||
alpha �?�* |
|||
beta �?�* |
|||
transB� |
|||
|
|||
4445 |
|||
Sigmoid_10"Sigmoid |
|||
|
|||
44 |
|||
4546Mul_11"Mul |
|||
� |
|||
46 |
|||
/network_body.linear_encoder.seq_layers.2.weight |
|||
-network_body.linear_encoder.seq_layers.2.bias47Gemm_12"Gemm* |
|||
alpha �?�* |
|||
beta �?�* |
|||
transB� |
|||
|
|||
4748 |
|||
Sigmoid_13"Sigmoid |
|||
|
|||
47 |
|||
4849Mul_14"Mul |
|||
L |
|||
action_masks50Slice_15"Slice* |
|||
axes@�* |
|||
ends@�* |
|||
starts@ � |
|||
L |
|||
action_masks51Slice_16"Slice* |
|||
axes@�* |
|||
ends@�* |
|||
starts@� |
|||
� |
|||
49 |
|||
/action_model._distributions.0.branches.0.weight |
|||
-action_model._distributions.0.branches.0.bias52Gemm_17"Gemm* |
|||
alpha �?�* |
|||
beta �?�* |
|||
transB� |
|||
* |
|||
5253 |
|||
Softmax_18"Softmax* |
|||
axis� |
|||
|
|||
53 |
|||
5054Mul_19"Mul |
|||
H |
|||
5455ReduceSum_20" ReduceSum* |
|||
axes@����������* |
|||
keepdims � |
|||
. |
|||
5556Unsqueeze_21" Unsqueeze* |
|||
axes@� |
|||
|
|||
54 |
|||
5657Div_22"Div |
|||
158Constant_23"Constant* |
|||
value*J���3� |
|||
|
|||
57 |
|||
5859Add_24"Add |
|||
|
|||
5960Log_25"Log |
|||
* |
|||
6061 |
|||
Softmax_26"Softmax* |
|||
axis� |
|||
� |
|||
49 |
|||
/action_model._distributions.0.branches.1.weight |
|||
-action_model._distributions.0.branches.1.bias62Gemm_27"Gemm* |
|||
alpha �?�* |
|||
beta �?�* |
|||
transB� |
|||
* |
|||
6263 |
|||
Softmax_28"Softmax* |
|||
axis� |
|||
|
|||
63 |
|||
5164Mul_29"Mul |
|||
H |
|||
6465ReduceSum_30" ReduceSum* |
|||
axes@����������* |
|||
keepdims � |
|||
. |
|||
6566Unsqueeze_31" Unsqueeze* |
|||
axes@� |
|||
|
|||
64 |
|||
6667Div_32"Div |
|||
168Constant_33"Constant* |
|||
value*J���3� |
|||
|
|||
67 |
|||
6869Add_34"Add |
|||
|
|||
6970Log_35"Log |
|||
* |
|||
7071 |
|||
Softmax_36"Softmax* |
|||
axis� |
|||
# |
|||
71discrete_actionsLog_37"Log |
|||
|
|||
6173Log_38"Log |
|||
|
|||
7174Log_39"Log |
|||
0 |
|||
73 |
|||
74action Concat_40"Concat* |
|||
axis� |
|||
<memory_sizeConstant_41"Constant* |
|||
value* |
|||
J �torch-jit-export*=B-action_model._distributions.0.branches.0.biasJ *��B/action_model._distributions.0.branches.0.weightJ����I�<�/-<_#
��c��
��<Ǵw<ę�.�*<��;"�<a~�;lc�<Z4��M���=�x��S"O�e�5���8���:!,G�.m�d�W�t�������^<U������;wd:�ި;S�< |