Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 用神经网络训练物理系统的正向动力学模型_Python 3.x_Machine Learning_Neural Network_Tensorflow2.0 - Fatal编程技术网

Python 3.x 用神经网络训练物理系统的正向动力学模型

Python 3.x 用神经网络训练物理系统的正向动力学模型,python-3.x,machine-learning,neural-network,tensorflow2.0,Python 3.x,Machine Learning,Neural Network,Tensorflow2.0,我试图用神经网络预测物理系统的正向动力学。方程式是 f(X_t,A_t)=(X_{t+1}-X_t)/dt其中X是由角位置和角速度组成的状态向量,A_t是控制输入,dt是时间的小增量t。我有10k的数据点 我的代码: 将tensorflow导入为tf 将numpy作为np导入 从sklearn.preprocessing导入标准定标器、MinMaxScaler、RobustScaler、分位数变压器 np.设置打印选项(精度=3,抑制=True) 打印(tf.\U版本\U) """ 试图从方程中

我试图用神经网络预测物理系统的正向动力学。方程式是
f(X_t,A_t)=(X_{t+1}-X_t)/dt
其中
X
是由角位置和角速度组成的状态向量,
A_t
是控制输入,
dt
是时间的小增量
t
。我有10k的数据点

我的代码:

将tensorflow导入为tf
将numpy作为np导入
从sklearn.preprocessing导入标准定标器、MinMaxScaler、RobustScaler、分位数变压器
np.设置打印选项(精度=3,抑制=True)
打印(tf.\U版本\U)
"""
试图从方程中求出状态的增量f_(θ)
x{t+1}=x_t+dt*f_(θ)(x_t,a_t)
x:[q1、q2、q3、q4、q5、q6、q7、q1d、q2d、q3d、q4d、q5d、q6d、q7d]#q:角位置,qd:ang速度
a:[a1、a2、a3、a4、a5、a6、a7]#控制输入
"""
data=np.load('state\u actions\u 10k.npy',allow\u pickle=True)
X=np.hstack((数据[:,:7],数据[:,7:14]))
U=数据[:,14:]
dX=np.diff(X,轴=0)#状态残差
dt=1
scalarX=StandardScaler()#MinMaxScaler(功能范围=(-1,1))#StandardScaler()#RobustScaler()
scalarU=MinMaxScaler(特征值范围=(-1,1))
scalardX=MinMaxScaler(特征值范围=(-1,1))
scalarX.fit(X)
scalarU.fit(U)
scalardX.fit(dX)
normX=scalarX.transform(X)
normU=标量变换(U)
normdX=scalardX.transform(dX)
输入=np.hstack((normX,normU))
输入=输入[:-1]
输出=normdX
n、 测试分数,列分数=len(X),0.2,0.7
val_压裂=1-测试压裂-系列压裂
X_列=输入[:int(n*列分数)]
X_测试=输入[int(n*列压裂):int(n*(列压裂+测试压裂))]
X_val=输入[int(n*(列压裂+测试压裂)):]
Y列=输出[:int(n*列分数)]
Y_测试=输出[int(n*列压裂):int(n*(列压裂+测试压裂))]
Y_val=输出[int(n*(列压裂+测试压裂)):]
模型=tf.keras.Sequential([
tf.keras.Input(shape=(21,),
tf.keras.layers.Dense(128,活化='relu'),
tf.keras.layers.Dense(128,活化='relu'),
tf.keras.layers.Dense(128,活化='relu'),
tf.keras.致密层(14),
])
compile(优化器='adam',loss='mse',metrics=['accurity'])
火车=真
如果列车:
历史=model.fit(
X_火车,
你的火车,
批次大小=64,
纪元=100,
#我们通过了一些验证
#监控验证损失和度量
#在每个时代末
验证数据=(X值,Y值),
)
模型。保存权重(“保存权重/训练权重”)
其他:
模型。加载权重(“保存权重/训练权重”)
打印(“根据测试数据进行评估”)
结果=模型。评估(X检验、Y检验、批量大小=128)
打印(“测试损失,测试依据:”,结果)
打印(“为3个样本生成预测”)
预测=模型预测(X_检验[:3])
打印(“预测形状:”,预测.shape)
我看到最后的验证精度是0.9,我认为这是相当低的。
状态_actions.npy
和保存的网络权重可用


是否有人可以建议一种提高准确性的方法?

问题与microsoft dynamics无关-请不要发送不相关的标记(已删除)。动力学是连续的,因此这是一个回归问题,而不是分类问题。准确度仅在分类设置中才有意义。
Epoch 100/100
1094/1094 [==============================] - 1s 1ms/step - loss: 9.5670e-05 - accuracy: 0.9777 - val_loss: 0.0014 - val_accuracy: 0.9055
Evaluate on test data
157/157 [==============================] - 0s 759us/step - loss: 2.5453e-04 - accuracy: 0.9586
test loss, test acc: [0.0002545334573369473, 0.9585979580879211]