“x_y_Vx_Vy.npy”存储了一个1000行4列的数组,代表了1000个不同时刻,物体的4个状态(x, y, Vx, Vy),用 np.load 加载。 1. 分割数据,创建模型,训练模型,能够根据前N个状态,预测物体的第N+1个状态;希望每个学生的N有所差异,每个学生创建的模型有所差异;每个学生的训练过程有所差异; 2. 训练完成之后,用最初的0~99号准确数据,预测100~199号数据;预测过程中,只有0~99号数据是原始准确数据,其余数据必须用新预测的值;画图展示100~199号准确数据与100~199号预测数据的差异
时间: 2023-12-08 17:05:17 浏览: 195
GZ.rar_ gz_atmosphere2vy_site:www.pudn.com_university payroll_离退
1. 分割数据,创建模型,训练模型
根据题目要求,我们需要让每个学生的N有所差异,因此可以先定义一个函数来随机生成不同的N值。同时,为了保证模型的差异性,我们可以使用Keras的Sequential模型,并加入一些不同的层和参数。最后,我们使用fit函数对模型进行训练。以下是示例代码:
```python
import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Dropout
# 随机生成不同的N值
def random_N():
return np.random.randint(1, 4)
# 加载数据
data = np.load('x_y_Vx_Vy.npy')
X = data[:, :-4]
y = data[:, -4:]
# 分割数据
N = random_N()
X_train, y_train = X[:-N], y[N:]
X_test, y_test = X[-N:], y[-N:]
# 创建模型
model = Sequential()
model.add(Dense(32, input_shape=(4*N,), activation='relu'))
model.add(Dropout(0.2))
model.add(Dense(16, activation='relu'))
model.add(Dense(4, activation='linear'))
# 训练模型
model.compile(loss='mse', optimizer='adam')
model.fit(X_train, y_train, epochs=50, batch_size=32, validation_data=(X_test, y_test))
```
2. 预测100~199号数据并画图展示差异
训练完成后,我们可以用训练好的模型来预测100~199号数据的状态,并与准确数据进行比较。以下是示例代码:
```python
import matplotlib.pyplot as plt
# 预测100~199号数据
X_pred = X[100-N:200-N]
y_true = y[100:200]
y_pred = []
for i in range(N):
y_pred.append(model.predict(X_pred.reshape(1, -1)).reshape(-1))
X_pred = np.concatenate([X_pred[1:], y_pred[-1].reshape(1, -1)], axis=0)
# 画图展示差异
fig, axs = plt.subplots(4, 1, figsize=(10, 10))
for i in range(4):
axs[i].plot(y_true[:, i], label='True')
axs[i].plot(np.array(y_pred)[:, i], label='Predicted')
axs[i].legend()
plt.show()
```
注意,我们每次预测完一个状态后,需要将其加入到X_pred中,以便下一次预测使用。最后,我们可以画出每个状态的准确数据和预测数据的对比图,以便观察它们之间的差异。
阅读全文