基于Python的双层神经网络模型实现及优化 - 以材料参数预测为例

本代码使用Python实现了一个简单的双层神经网络模型,以预测材料参数(厚度、孔隙率、压缩回弹性率)为例,并探讨了模型优化方法。

1. 数据导入与预处理

import numpy as np
import pandas as pd

# 读取训练数据
data = pd.read_excel('C题.xlsx')
X = data[['接收距离(cm)', '热风速度(r/min)']].values
y = data[['厚度mm', '孔隙率(%)', '压缩回弹性率(%)']].values

2. 定义激活函数

本代码使用sigmoid函数作为激活函数。

# 定义激活函数(sigmoid函数)
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# 定义激活函数的导数
def sigmoid_derivative(x):
    return x * (1 - x)

3. 初始化权重和偏置

# 初始化权重和偏置
np.random.seed(0)
weights1 = 2 * np.random.random((2, 4)) - 1
weights2 = 2 * np.random.random((4, 3)) - 1
bias1 = np.zeros((1, 4))
bias2 = np.zeros((1, 3))

4. 定义训练迭代次数和学习率

# 定义训练迭代次数和学习率
epochs = 10000
learning_rate = 0.1

5. 训练模型

本代码使用反向传播算法进行模型训练。

# 训练模型
for i in range(epochs):
    # 前向传播
    layer1_output = sigmoid(np.dot(X, weights1) + bias1)
    layer2_output = sigmoid(np.dot(layer1_output, weights2) + bias2)

    # 计算误差
    layer2_error = y - layer2_output
    if i % 1000 == 0:
        print('Error after', i, 'epochs:', np.mean(np.abs(layer2_error)))

    # 反向传播
    layer2_delta = layer2_error * sigmoid_derivative(layer2_output)
    layer1_error = layer2_delta.dot(weights2.T)
    layer1_delta = layer1_error * sigmoid_derivative(layer1_output)

    # 更新权重和偏置
    weights2 += layer1_output.T.dot(layer2_delta) * learning_rate
    bias2 += np.sum(layer2_delta, axis=0, keepdims=True) * learning_rate
    weights1 += X.T.dot(layer1_delta) * learning_rate
    bias1 += np.sum(layer1_delta, axis=0, keepdims=True) * learning_rate

6. 测试模型

# 测试模型
test_data = pd.read_excel('C题.xlsx')
X_test = data[['接收距离(cm)', '热风速度(r/min)']].values
y_true = data[['厚度mm', '孔隙率(%)', '压缩回弹性率(%)']].values

layer1_output_test = sigmoid(np.dot(X_test, weights1) + bias1)
layer2_output_test = sigmoid(np.dot(layer1_output_test, weights2) + bias2)

print('Predicted Output:', layer2_output_test)
print('True Output:', y_true)

7. 常见问题与解决方法

问题1: Predicted Output输出结果与'厚度mm', '孔隙率(%)', '压缩回弹性率(%)'不一致

原因:

  1. 定义训练数据时,y的列顺序不正确。
  2. 模型的输出层的神经元数量不正确。

解决方法:

  1. 确保y的列顺序与训练数据中的列顺序一致。
  2. 调整输出层的神经元数量,使其与输出变量数量一致。

例如,如果你的数据有4个输出变量,可以将输出层的神经元数量修改为4:

weights2 = 2 * np.random.random((4, 4)) - 1
bias2 = np.zeros((1, 4))

然后,将layer2_output_test的输出结果与y_true进行比较。

8. 总结

本代码展示了一个简单的双层神经网络模型实现方法,并探讨了模型优化方法。你可以根据自己的需求对代码进行修改和扩展。

基于Python的双层神经网络模型实现及优化 - 以材料参数预测为例

原文地址: https://www.cveoy.top/t/topic/fM1g 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录