从零学习量化交易42单层神经网络模型读写3Tensorflow

(1)打开Spyder软件,在目录D:\zwPython\zwrk\1_Quant_TensorFlow,新建文件

# -*- coding: utf-8 -*-
"""
Created on Sun Feb 16 20:46:21 2025
'''
单层神经网络模型读写
202502161949
'''
@author: Administrator
"""

import sys, os
sys.path.append("topqt/")

import numpy as np
import pandas as pd
import tushare as ts
import plotly as py
import plotly.figure_factory as pyff

import math
import arrow
import ffn
import pypinyin
import pandas_datareader as pdr
import matplotlib.pyplot as plt

import zsys2025  # 20250213
import ztools2025 as zt
import ztools_str as zstr
import ztools_data2025 as zdat
import ztools_draw2025 as zdr
import ztools_tq2025 as ztq  # 20250213
import zai_keras2025 as zks

import keras
from keras.models import Sequential,load_model
from keras.layers import Dense, Input, Dropout
from keras.optimizers import RMSprop
from keras.utils import plot_model
#
import tensorlayer as tl
import tensorflow as tf



#1
print('\n#1,set.sys')
pd.set_option('display.width', 450)    
pd.set_option('display.float_format', zt.xfloat3)    
rlog='/tmp/log_tmp'
if os.path.exists(rlog):tf.gfile.DeleteRecursively(rlog)

#2
print('\n#2,读取数据')
fss='data/lin_reg01.csv'
df=pd.read_csv(fss)
#
dnum=len(df.index)
dnum2=round(dnum*0.6)
print('\ndnum,',dnum,dnum2)
print(df.tail())
#
print('\n#3,xed.train.数据')
df_train=df.head(dnum2)
df_test=df.tail(dnum-dnum2)
#
x_train,y_train=df_train['x'].values,df_train['y'].values
x_test, y_test = df_test['x'].values,df_test['y'].values
print('train,',x_train[0],y_train[0])

#4
print('\n#4,model建立神经网络模型')
model=zks.mlp01()
model.summary()
#
model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])    
#
model.save('tmp1/mlp01.dat')


#5 模型训练
print('\n#5 模型训练 fit')
mx=load_model('tmp1/mlp01.dat')
mx.fit(x_train, y_train, epochs=200, batch_size=128)
#
mx.save('tmp1/mlp02x.dat')

#6 整理预测数据 
print('\n#6 整理预测数据 ')
y_pred = mx.predict(x_test)
df_test['y_pred']=zdat.ds4x(y_pred,df_test.index,True)
dacc,_=ztq.ai_acc_xed2x(df_test.y,df_test['y_pred'],5,False)
print('acc:',dacc)

(2)程序输出结果

runfile('D:/zwPython/zwrk/1_Quant_TensorFlow/42-Single-layerNeuralNetworkModelReadWrite.py', wdir='D:/zwPython/zwrk/1_Quant_TensorFlow')
Reloaded modules: zsys2025, ztools2025, zsys, ztools_str, ztools, ztools_web, ztools_data, ztools_tq, zpd_talib, ztools_data2025, zpd_talib2025, ztools_draw2025, ztools_tq2025, zai_keras2025, zai_tools2025

#1,set.sys

#2,读取数据

dnum, 200 120
         x        y       y2
195 -0.552  -52.960  -49.315
196  1.852  183.505  167.989
197 -0.909  -88.254  -81.620
198 -0.873  -85.407  -78.413
199 -1.513 -147.368 -136.197

#3,xed.train.数据
train, 1.2549102859740084 127.43325141523249

#4,model建立神经网络模型
Model: "sequential_16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
mlp01 (Dense)                (None, 1)                 2         
=================================================================
Total params: 2
Trainable params: 2
Non-trainable params: 0
_________________________________________________________________

#5 模型训练 fit

#6 整理预测数据 
acc: 88.75

(3)程序代码注释

# -*- coding: utf-8 -*-
"""
Created on Sun Feb 16 20:46:21 2025
'''
单层神经网络模型读写
202502161949
'''
@author: Administrator
"""

# 导入系统模块,用于操作 Python 解释器相关功能
import sys
# 导入操作系统模块,用于与操作系统进行交互,如文件和目录操作
import os
# 将 'topqt/' 目录添加到系统模块搜索路径中,方便后续导入该目录下的自定义模块
sys.path.append("topqt/")

# 导入数值计算库 numpy,用于处理数组和矩阵运算
import numpy as np
# 导入数据处理和分析库 pandas,用于处理表格数据
import pandas as pd
# 导入 tushare 库,这是一个财经数据接口包,不过在本代码中未实际使用其功能
import tushare as ts
# 导入 plotly 库及其子模块,用于创建交互式可视化图表,但本代码未使用其具体功能
import plotly as py
import plotly.figure_factory as pyff

# 导入数学计算库 math,提供基本的数学函数
import math
# 导入日期处理库 arrow,不过在本代码中未实际使用
import arrow
# 导入金融分析库 ffn,本代码未使用其功能
import ffn
# 导入中文转拼音库 pypinyin,本代码未使用
import pypinyin
# 导入 pandas_datareader 库,用于从各种数据源获取数据,本代码未使用
import pandas_datareader as pdr
# 导入绘图库 matplotlib 的 pyplot 模块,用于绘制静态图表
import matplotlib.pyplot as plt

# 导入自定义的系统配置模块
import zsys2025  # 20250213
# 导入自定义的工具模块
import ztools2025 as zt
# 导入自定义的字符串处理模块
import ztools_str as zstr
# 导入自定义的数据处理模块
import ztools_data2025 as zdat
# 导入自定义的绘图模块
import ztools_draw2025 as zdr
# 导入自定义的特定工具模块
import ztools_tq2025 as ztq  # 20250213
# 导入自定义的 Keras 相关模块
import zai_keras2025 as zks

# 导入 Keras 库,这是一个用于构建和训练深度学习模型的高级神经网络 API
import keras
# 从 Keras 中导入顺序模型类和加载模型的函数
from keras.models import Sequential, load_model
# 从 Keras 中导入全连接层、输入层和丢弃层类
from keras.layers import Dense, Input, Dropout
# 从 Keras 中导入 RMSprop 优化器类
from keras.optimizers import RMSprop
# 从 Keras 中导入用于绘制模型结构图的函数
from keras.utils import plot_model

# 导入 TensorLayer 库,它是基于 TensorFlow 的深度学习库,本代码未实际使用其功能
import tensorlayer as tl
# 导入 TensorFlow 库,这是一个广泛使用的深度学习框架
import tensorflow as tf

#1
print('\n#1,set.sys')
# 设置 pandas 显示表格的宽度为 450 个字符
pd.set_option('display.width', 450)
# 设置 pandas 显示浮点数的格式,使用自定义的函数 zt.xfloat3 进行格式化
pd.set_option('display.float_format', zt.xfloat3)
# 定义 TensorBoard 日志文件的存储路径
rlog = '/tmp/log_tmp'
# 如果该日志路径已经存在,则递归删除该路径下的所有文件和文件夹
if os.path.exists(rlog):
    tf.gfile.DeleteRecursively(rlog)

#2
print('\n#2,读取数据')
# 定义要读取的 CSV 文件路径
fss = 'data/lin_reg01.csv'
# 使用 pandas 的 read_csv 函数读取 CSV 文件,并将数据存储在 DataFrame 中
df = pd.read_csv(fss)
# 获取数据的行数
dnum = len(df.index)
# 计算训练数据的行数,取数据总行数的 60%
dnum2 = round(dnum * 0.6)
# 打印数据的总行数和训练数据的行数
print('\ndnum,', dnum, dnum2)
# 打印数据的最后几行
print(df.tail())

print('\n#3,xed.train.数据')
# 取数据的前 dnum2 行作为训练数据
df_train = df.head(dnum2)
# 取数据的后 dnum - dnum2 行作为测试数据
df_test = df.tail(dnum - dnum2)
# 从训练数据中提取特征 'x' 列的数据,并转换为 numpy 数组
x_train, y_train = df_train['x'].values, df_train['y'].values
# 从测试数据中提取特征 'x' 列的数据,并转换为 numpy 数组
x_test, y_test = df_test['x'].values, df_test['y'].values
# 打印训练数据的第一组特征和标签值
print('train,', x_train[0], y_train[0])

#4
print('\n#4,model建立神经网络模型')
# 调用自定义模块 zks 中的 mlp01 函数创建单层神经网络模型
model = zks.mlp01()
# 打印模型的概要信息,包括各层的结构和参数数量
model.summary()
# 编译模型,指定损失函数为均方误差(MSE),优化器为随机梯度下降(SGD),评估指标为准确率
model.compile(loss='mse', optimizer='sgd', metrics=['accuracy'])
# 将训练好的模型保存到指定路径
model.save('tmp1/mlp01.dat')

#5 模型训练
print('\n#5 模型训练 fit')
# 从指定路径加载之前保存的模型
mx = load_model('tmp1/mlp01.dat')
# 使用训练数据对加载的模型进行训练,设置训练轮数为 200,每轮训练的批次大小为 128,不显示训练过程信息
mx.fit(x_train, y_train, epochs=200, verbose=0, batch_size=128)
# 将训练后的模型保存到新的路径
mx.save('tmp1/mlp02x.dat')

#6 整理预测数据 
print('\n#6 整理预测数据 ')
# 使用训练后的模型对测试数据进行预测
y_pred = mx.predict(x_test)
# 调用自定义函数 ds4x 对预测结果进行处理,并将处理后的结果添加到测试数据 DataFrame 中作为新的列 'y_pred'
df_test['y_pred'] = zdat.ds4x(y_pred, df_test.index, True)
# 调用自定义函数 ai_acc_xed2x 计算预测准确率
dacc, _ = ztq.ai_acc_xed2x(df_test.y, df_test['y_pred'], 5, False)
# 打印预测准确率
print('acc:', dacc)

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/907114
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2分钟前
下一篇 26秒前

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注