深度学习中的神经网络架构

深度学习领域,神经网络扮演着至关重要的角色。它们模仿人脑的工作方式,学习复杂且通常是非线性的输入输出关系。一个基本的神经网络由输入层、隐藏层和输出层组成,每一层包含一定数量的节点或神经元。多层的神经网络被称为深度学习系统。

神经网络在结构上非常复杂,计算成本高昂。幸运的是,有Keras,这是一个基于Tensorflow的Python深度学习API,它极大地简化了构建复杂神经网络的工作。Keras提供了两种构建神经网络的方式:顺序API和函数式API。

顺序API

顺序API通过逐层创建模型,简单易用。但是,它不允许层的共享或分支,也不能有多个输入或输出。以下是使用顺序API构建神经网络的代码示例:

from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Activation from tensorflow.keras.optimizers import Adam # 创建模型 model = Sequential() model.add(Dense(4, activation='relu')) # 定义隐藏层 model.add(Dense(4, activation='relu')) model.add(Dense(1)) # 输出层 # 定义优化器和损失函数 model.compile(optimizer='adam', loss='mse') # 训练模型 model.fit(x=X_train, y=y_train, validation_data=(X_test, y_test), batch_size=128, epochs=400)

函数式API

函数式API比顺序API更灵活,允许层的共享和分支,并且可以有多个输入和输出。以下是使用函数式API构建神经网络的代码示例:

from tensorflow.keras.models import Model from tensorflow.keras.layers import Input, Dense # 创建层 input_layer = Input(shape=(3,)) Layer_1 = Dense(4, activation="relu")(input_layer) Layer_2 = Dense(4, activation="relu")(Layer_1) output_layer = Dense(1, activation="linear")(Layer_2) # 定义模型 model = Model(inputs=input_layer, outputs=output_layer) # 定义优化器和损失函数 model.compile(optimizer='adam', loss='mse') # 训练模型 model.fit(X_train, y_train, epochs=400, batch_size=128, validation_data=(X_test, y_test))

函数式API允许构建更复杂的模型,例如预测多个输出。以下是一个实际案例,使用函数式API预测电力厂的能源输出和排气真空:

实际案例:电力厂数据集

import numpy as np import pandas as pd import tensorflow as tf from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler import matplotlib.pyplot as plt # 导入数据集 df = pd.read_excel('Folds5x2_pp.xlsx') # 定义函数获取模型输出 def get_outputs(data): y1 = data.pop('PE') y1 = np.array(y1) y2 = data.pop('V') y2 = np.array(y2) return y1, y2 # 划分数据集 train, test = train_test_split(df, test_size=0.2, random_state=1) # 获取训练和测试数据的输出 y_train = get_outputs(train) y_test = get_outputs(test) # 缩放输入数据 min_max = MinMaxScaler() X_train = min_max.fit_transform(train) X_test = min_max.transform(test) # 导入神经网络所需的库 from tensorflow.keras.models import Model from tensorflow.keras.layers import Input, Dense # 构建神经网络 input_layer = Input(shape=(3,), name='input_layer') Layer_1 = Dense(10, activation="relu", name='Layer_1')(input_layer) Layer_2 = Dense(10, activation="relu", name='Layer_2')(Layer_1) y1_output = Dense(1, activation="linear", name='y1_output')(Layer_2) Branched_layer = Dense(10, activation="relu", name='Branched_layer')(Layer_2) y2_output = Dense(1, activation="linear", name='y2_output')(Branched_layer) # 定义模型 model = Model(inputs=input_layer, outputs=[y1_output, y2_output]) # 模型摘要 model.summary() # 定义优化器和损失函数 model.compile(optimizer='adam', loss={'y1_output': 'mse', 'y2_output': 'mse'}) # 训练模型 model.fit(X_train, y_train, epochs=1000, batch_size=128, validation_data=(X_test, y_test))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485