在pycharm中,做2输入3输出的cnn数据回归预测,共有15000组数据;对输出和输出进行归一化,并打乱数据集。其中,数据集为xls格式的数据,划分训练集和验证集,优化器采用梯度下降法,训练轮数为1000轮,每轮训练1000组数据;学习率为0.01,每训练200轮,学习率调整为之前学习率的一半。记录训练过程中损失函数的值,打印出每一轮损失函数的值、学习率的变化、输入和输出,绘制出训练过程中损失函数值的变化曲线。保存训练好的网络模型。手动输入数据集,利用训练好的网络求取输出,并将输出反归一化。
时间: 2024-02-28 12:52:45 浏览: 78
在PyCharm中控制台输出日志分层级分颜色显示的方法
首先,将xls格式的数据读入,并将输入和输出进行归一化处理。读入数据的代码如下:
```python
import pandas as pd
import numpy as np
data = pd.read_excel('data.xls')
x = np.array(data.iloc[:, :2])
y = np.array(data.iloc[:, 2:])
# 归一化处理
x = (x - np.mean(x, axis=0)) / np.std(x, axis=0)
y = (y - np.mean(y, axis=0)) / np.std(y, axis=0)
```
接下来,将数据集打乱,并将其划分为训练集和验证集。代码如下:
```python
indices = np.random.permutation(len(x))
train_indices, val_indices = indices[:int(len(x)*0.8)], indices[int(len(x)*0.8):]
train_x, train_y = x[train_indices], y[train_indices]
val_x, val_y = x[val_indices], y[val_indices]
```
然后,构建CNN模型,并使用梯度下降法进行优化。代码如下:
```python
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(64, input_dim=2, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(3, activation='linear'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
# 训练模型
for i in range(1000):
if i % 200 == 0 and i > 0:
lr = float(K.get_value(model.optimizer.lr))
K.set_value(model.optimizer.lr, lr/2)
history = model.fit(train_x, train_y, epochs=1, batch_size=1000, validation_data=(val_x, val_y))
# 打印损失函数的值、学习率的变化、输入和输出
print('Epoch {}/{}'.format(i+1, 1000))
print('Learning rate:', K.get_value(model.optimizer.lr))
print('Loss:', history.history['loss'])
print('Validation loss:', history.history['val_loss'])
print('Input:', train_x[0])
print('Output:', train_y[0])
# 绘制损失函数值的变化曲线
import matplotlib.pyplot as plt
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Val'], loc='upper right')
plt.show()
# 保存训练好的模型
model.save('model.h5')
```
最后,手动输入数据集,利用训练好的网络求取输出,并将输出反归一化。代码如下:
```python
# 加载模型
from keras.models import load_model
model = load_model('model.h5')
# 手动输入数据集
test_x = np.array([[1.2, 2.3], [3.4, 4.5], [5.6, 6.7]])
# 归一化处理
test_x = (test_x - np.mean(x, axis=0)) / np.std(x, axis=0)
# 预测输出
test_y = model.predict(test_x)
# 反归一化
test_y = test_y * np.std(y, axis=0) + np.mean(y, axis=0)
```
阅读全文