要求如下:不使用tensorflow、pytorch等框架,写一个三输入一输出的bp神经网络,训练集与测试集的比例为7:3,数据集的格式为Excel
时间: 2023-08-31 14:33:30 浏览: 166
三层BP神经网络的数据训练测试,自己编程实现的BP神经网络,不使用matlab自带的工具箱,matlab2021a测试
5星 · 资源好评率100%
### 回答1:
我理解你的要求是:请构建一个三输入一输出的BP神经网络,不使用框架,训练集和测试集的比例为7:3,数据集的格式为Excel。可以使用Python来编写代码,首先需要读取Excel文件中的训练集和测试集,然后定义模型的结构,并设置超参数,最后使用梯度下降算法训练模型,并在测试集上评估模型的性能。
### 回答2:
使用Python语言编写一个简单的三输入一输出的BP神经网络,并使用Excel作为数据集。
首先,需要安装`openpyxl`库来读取和写入Excel文件。可以使用以下命令来安装库:
```
pip install openpyxl
```
接下来,创建一个名为`bp_neural_network.py`的文件,并在文件中编写以下代码:
```python
import math
import random
from openpyxl import Workbook, load_workbook
def sigmoid(x):
return 1 / (1 + math.exp(-x))
def derivative_sigmoid(x):
return x * (1 - x)
class NeuralNetwork:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.hidden_weights = [[random.uniform(-1, 1) for _ in range(hidden_size)] for _ in range(input_size)]
self.output_weights = [random.uniform(-1, 1) for _ in range(hidden_size)]
def train(self, learning_rate, epochs, train_file):
workbook = load_workbook(train_file)
sheet = workbook.active
num_samples = sheet.max_row - 1
for epoch in range(epochs):
for i in range(2, sheet.max_row + 1):
input_data = [sheet.cell(row=i, column=j).value for j in range(1, self.input_size + 1)]
output_data = sheet.cell(row=i, column=self.input_size + 1).value
hidden_input = [sum([input_data[j] * self.hidden_weights[j][k] for j in range(self.input_size)]) for k in range(self.hidden_size)]
hidden_output = [sigmoid(x) for x in hidden_input]
output_input = sum([hidden_output[j] * self.output_weights[j] for j in range(self.hidden_size)])
output_output = sigmoid(output_input)
output_error = output_data - output_output
output_delta = output_error * derivative_sigmoid(output_output)
hidden_error = [output_delta * self.output_weights[j] for j in range(self.hidden_size)]
hidden_delta = [hidden_error[j] * derivative_sigmoid(hidden_output[j]) for j in range(self.hidden_size)]
self.output_weights = [self.output_weights[j] + learning_rate * output_delta * hidden_output[j] for j in range(self.hidden_size)]
self.hidden_weights = [[self.hidden_weights[i][j] + learning_rate * hidden_delta[j] * input_data[i] for j in range(self.hidden_size)] for i in range(self.input_size)]
def predict(self, test_file):
workbook = load_workbook(test_file)
sheet = workbook.active
num_samples = sheet.max_row - 1
correct_predictions = 0
for i in range(2, sheet.max_row + 1):
input_data = [sheet.cell(row=i, column=j).value for j in range(1, self.input_size + 1)]
output_data = sheet.cell(row=i, column=self.input_size + 1).value
hidden_input = [sum([input_data[j] * self.hidden_weights[j][k] for j in range(self.input_size)]) for k in range(self.hidden_size)]
hidden_output = [sigmoid(x) for x in hidden_input]
output_input = sum([hidden_output[j] * self.output_weights[j] for j in range(self.hidden_size)])
output_output = sigmoid(output_input)
predicted_output = round(output_output)
if predicted_output == output_data:
correct_predictions += 1
accuracy = correct_predictions / num_samples * 100
return accuracy
input_size = 3
hidden_size = 4
output_size = 1
learning_rate = 0.1
epochs = 100
train_file = "train_data.xlsx"
test_file = "test_data.xlsx"
network = NeuralNetwork(input_size, hidden_size, output_size)
network.train(learning_rate, epochs, train_file)
accuracy = network.predict(test_file)
print("Accuracy:", accuracy)
```
在代码中,我们首先定义了Sigmoid激活函数及其导数函数。然后,创建了一个名为`NeuralNetwork`的类,其中包含了神经网络的初始化函数、训练函数和预测函数。
在训练函数中,我们使用`openpyxl`库打开并读取训练集的Excel文件。每次迭代,我们从每一行中读取输入数据和输出数据,并计算每一层的输入和输出。然后,我们根据误差和导数更新权重。在预测函数中,我们使用相同的方式读取测试集的Excel文件,并根据模型的权重进行预测并计算准确率。
最后,可以根据需要,将训练数据保存到名为`train_data.xlsx`的Excel文件中,将测试数据保存到名为`test_data.xlsx`的Excel文件中。
需要注意的是,由于本文提供的代码为简化版,请根据实际需求和数据集的格式对代码进行适当的修改和优化。
### 回答3:
要实现一个三输入一输出的bp神经网络,我们可以使用Python中的常用库,如numpy和pandas,来读取和处理Excel数据集。
首先,我们需要导入所需的库:
import numpy as np
import pandas as pd
然后,我们可以使用pandas库的read_excel函数来读取Excel数据集。假设Excel文件名为data.xlsx,数据在工作表“Sheet1”中,我们可以使用以下代码读取数据集:
data = pd.read_excel('data.xlsx', sheet_name='Sheet1')
接下来,我们需要划分数据集为训练集和测试集。我们可以使用numpy库的random.permutation函数来随机打乱数据集,并通过索引划分为训练集和测试集。假设数据集有100个样本,我们可以使用以下代码将数据集划分为训练集和测试集:
shuffled_indices = np.random.permutation(data.shape[0])
train_indices = shuffled_indices[:int(0.7*data.shape[0])]
test_indices = shuffled_indices[int(0.7*data.shape[0]):]
接下来,我们可以提取输入和输出的特征,并将它们存储在不同的变量中。假设输入特征位于Excel文件的第一列至第三列,输出特征位于第四列,我们可以使用以下代码提取输入和输出的特征:
train_X = data.iloc[train_indices, :3].values
train_y = data.iloc[train_indices, 3].values
test_X = data.iloc[test_indices, :3].values
test_y = data.iloc[test_indices, 3].values
现在我们有了训练集和测试集的输入和输出特征。接下来,我们可以定义神经网络的结构,并进行训练和预测。由于题目要求不使用任何深度学习框架,我们需要手动实现bp神经网络的前向传播和反向传播过程。这包括定义网络的权重和偏置,定义激活函数(如sigmoid函数),进行前向传播计算输出,计算损失函数,计算梯度,更新权重和偏置等。
以上是一个简单实现的提示,完整实现一个bp神经网络需要更多的代码和数学推导。希望这些提示能对你提供一些帮助。
阅读全文