使用全连接神经网络训练了一个模型,并将模型格式转为ONNX,可以在Unity中部署的模型格式。但是遇见在python中验证输入-输出的关系时正确的,但是在unity中却出现输入输出不一致问题。
最终经过一番查找发现了问题所在,我在在Python中,对输入数据进行了标准化处理。因此在Unity中需要对输入数据执行相同的标准化过程。
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
以下是我的代码
using UnityEngine;
using System.IO;
using System.Linq;
public class StandardizeInput : MonoBehaviour
{
private float[] inputData;
private float mean;
private float stdDev;
void Start()
{
string filePath = Path.Combine(Application.dataPath, "FCNN", "input_values.txt");
if (File.Exists(filePath))
{
// 读取文件中的数据
string[] fileLines = File.ReadAllLines(filePath);
inputData = fileLines.Select(line => float.Parse(line)).ToArray();
// 计算均值
mean = inputData.Average();
// 计算标准差
stdDev = Mathf.Sqrt(inputData.Select(val => (val - mean) * (val - mean)).Average());
Debug.Log("Mean: " + mean);
Debug.Log("Standard Deviation: " + stdDev);
// 对数据进行标准化
float[] standardizedData = inputData.Select(val => (val - mean) / stdDev).ToArray();
// 打印标准化后的数据
foreach (var val in standardizedData)
{
Debug.Log("Standardized Value: " + val);
}
}
else
{
Debug.LogError("File not found: " + filePath);
}
}
// 进行标准化
public float Standardize(float inputValue)
{
return (inputValue - mean) / stdDev;
}
}