遗传优化算法优化LSTM结构-准确率

本文探讨了如何使用遗传优化算法来调整LSTM(长短期记忆)神经网络的结构,以提高其预测准确性。文章分为三个部分,包括神经网络的基本介绍,遗传算法的优化实施,以及最终的实验结果展示。
摘要由CSDN通过智能技术生成


话不多说,直接上代码

神经网络部分
#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
@author: liujie
@software: PyCharm
@file: main.py
@time: 2020/11/17 20:46
"""
'''
    整体思路:
        1.首先,写一个main.py文件进行神经网络的训练及测试过程
        2.将main.py中需要优化的参数(这里我们优化LSTM层数和全连接层数及每层神经元的个数)统一写到一个列表num中
        3.然后,遗传算法编写GA.py,用需要传入main.py文件的列表num当染色体,需要优化的参数是染色体上的基因
        
    main.py文件中,由于需要将所有优化的参数写到一个列表中,所以需要在文件中定义两个函数,
    分别是创建LSTM函数creat_lstm(inputs,units,return_sequences)
         创建全连接层函数creat_dense(inputs,units)
'''

import numpy as np
import tensorflow as tf
import pandas as pd
import matplotlib.pylab as plt

from tensorflow import keras
from tensorflow.keras.layers import LSTM, Dense, Dropout, BatchNormalization, Input
from tensorflow.keras import optimizers, losses, metrics, models


# 定义LSTM函数
def create_lstm(inputs, units, return_sequences):
    '''
    定义LSTM函数
    :param inputs:输入,如果这一层是第一层LSTM层,则传入layers.Input()的变量名,否则传入的是上一个LSTM层
    :param units: LSTM层的神经元
    :param return_sequences: 如果不是最后一层LSTM,都需要保留所有输出以传入下一LSTM层
    :return:
    '''
    lstm = LSTM(units, return_sequences=return_sequences)(inputs)
    print('LSTM: ', lstm.shape)
    return lstm


def create_dense(inputs, units):
    '''
    定义Dense层函数
    :param inputs:输入,如果这一连接层是第一层全连接层,则需传入layers.Flatten()的变量名
    :param units: 全连接层单元数
    :return: 全连接层,BN层,dropout层
    '''
    # dense层
    dense = Dense(units, kernel_regularizer=keras.regularizers.l2(0.001), activation='relu')(inputs)
    print('Dense:', dense.shape)
    # dropout层
    dense_dropout = Dropout(rate=0.2)(dense)

    dense_batch = BatchNormalization()(dense_dropout)
    return dense, dense_dropout, dense_batch


def load():
    '''
    数据集加载
    :return:
    '''
    (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
    # 数据集归一化
    x_train, x_test = x_train / 255.0, x_test / 255.0
    return x_train, y_train, x_test, y_test


def classify(x_train, y_train, x_test, y_test, num):
    '''
    利用num及上面定义的层,构建模型
    :param x_train:
    :param y_train:
    :param x_test:
    :param y_test:
    :param num: 需要优化的参数(LSTM和全连接层层数以及每层神经元的个数),同时,也是遗传算法中的染色体
    :return:
    '''
    # 设置LSTM层参数
    lstm_num_layers = num[0
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值