(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 tensorflow as tf
from tensorflow.keras.models import Sequential,load_model
from tensorflow.keras.layers import Dense, Input, Dropout
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.utils import plot_model
from tensorflow.keras.callbacks import TensorBoard
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_42'
#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('tmp_42_model1/')
#5 模型训练
print('\n#5 模型训练 fit')
mx=load_model('tmp_42_model1/')
mx.fit(x_train, y_train, epochs=200, batch_size=128)
#
mx.save('tmp_42_model2/')
#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)程序输出结果
#6 整理预测数据
acc: 88.75
(3)程序代码注释
# -*- coding: utf-8 -*-
"""
Created on Sun Feb 16 20:46:21 2025
'''
单层神经网络模型读写
202502161949
'''
@author: Administrator
"""
# 导入sys和os模块
# sys模块提供了一些变量和函数来操作Python解释器
# os模块提供了与操作系统进行交互的功能
import sys, os
# 将"topqt/"目录添加到Python的模块搜索路径中,方便后续导入该目录下的模块
sys.path.append("topqt/")
# 导入numpy库,用于高效的数值计算,如数组操作、矩阵运算等
import numpy as np
# 导入pandas库,用于数据处理和分析,提供了DataFrame等数据结构
import pandas as pd
# 导入tushare库,可用于获取金融数据
import tushare as ts
# 导入plotly库,用于创建交互式可视化图表
import plotly as py
# 导入plotly的figure_factory模块,提供了创建特定类型图表的函数
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
# 导入自定义模块zsys2025,可能包含一些系统相关的配置和工具函数
import zsys2025 # 20250213
# 导入自定义模块ztools2025,可能包含通用的工具函数
import ztools2025 as zt
# 导入自定义模块ztools_str,可能包含字符串处理的工具函数
import ztools_str as zstr
# 导入自定义模块ztools_data2025,可能包含数据处理的工具函数
import ztools_data2025 as zdat
# 导入自定义模块ztools_draw2025,可能包含绘图的工具函数
import ztools_draw2025 as zdr
# 导入自定义模块ztools_tq2025,可能包含与tushare相关的工具函数
import ztools_tq2025 as ztq # 20250213
# 导入自定义模块zai_keras2025,可能包含与Keras相关的自定义函数
import zai_keras2025 as zks
# 导入tensorflow库,用于构建和训练深度学习模型
import tensorflow as tf
# 从tensorflow.keras.models中导入Sequential类和load_model函数
# Sequential类用于构建顺序模型,load_model函数用于加载已保存的模型
from tensorflow.keras.models import Sequential,load_model
# 从tensorflow.keras.layers中导入Dense、Input和Dropout层
# Dense层是全连接层,Input层用于指定输入形状,Dropout层用于防止过拟合
from tensorflow.keras.layers import Dense, Input, Dropout
# 从tensorflow.keras.optimizers中导入RMSprop优化器,用于优化模型参数
from tensorflow.keras.optimizers import RMSprop
# 从tensorflow.keras.utils中导入plot_model函数,用于可视化模型结构
from tensorflow.keras.utils import plot_model
# 从tensorflow.keras.callbacks中导入TensorBoard回调函数,用于记录训练过程中的信息
from tensorflow.keras.callbacks import TensorBoard
# 导入tensorlayer库,用于构建和训练深度学习模型
import tensorlayer as tl
# 再次导入tensorflow库,此处可能是多余导入
import tensorflow as tf
#1
# 打印提示信息,表明开始进行系统设置
print('\n#1,set.sys')
# 设置pandas显示DataFrame时的宽度为450个字符
pd.set_option('display.width', 450)
# 设置pandas显示浮点数时的格式,调用zt.xfloat3函数进行格式化
pd.set_option('display.float_format', zt.xfloat3)
# 定义日志目录的名称
rlog='tmp_42'
# 注释部分代码,若目录存在则递归删除该目录
#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中
df=pd.read_csv(fss)
#
# 获取DataFrame的行数,即数据的数量
dnum=len(df.index)
# 计算数据的60%的数量,并四舍五入
dnum2=round(dnum*0.6)
# 打印数据的总数和60%的数据数量
print('\ndnum,',dnum,dnum2)
# 打印DataFrame的最后几行数据
print(df.tail())
#
#3
# 打印提示信息,表明开始准备训练数据
print('\n#3,xed.train.数据')
# 取DataFrame的前dnum2行数据作为训练数据
df_train=df.head(dnum2)
# 取DataFrame的后dnum - dnum2行数据作为测试数据
df_test=df.tail(dnum-dnum2)
#
# 从训练数据中提取特征列'x'的值作为训练特征,提取标签列'y'的值作为训练标签
x_train,y_train=df_train['x'].values,df_train['y'].values
# 从测试数据中提取特征列'x'的值作为测试特征,提取标签列'y'的值作为测试标签
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'])
#
# 将训练前的模型保存到'tmp_42_model1/'目录下
model.save('tmp_42_model1/')
#5 模型训练
# 打印提示信息,表明开始进行模型训练
print('\n#5 模型训练 fit')
# 从'tmp_42_model1/'目录加载之前保存的模型
mx=load_model('tmp_42_model1/')
# 使用训练数据对模型进行训练,指定训练的轮数为200,批次大小为128
mx.fit(x_train, y_train, epochs=200, batch_size=128)
#
# 将训练后的模型保存到'tmp_42_model2/'目录下
mx.save('tmp_42_model2/')
#6 整理预测数据
# 打印提示信息,表明开始整理预测数据
print('\n#6 整理预测数据 ')
# 使用训练好的模型对测试数据进行预测
y_pred = mx.predict(x_test)
# 调用zdat.ds4x函数处理预测结果,并将结果添加到测试数据的DataFrame中作为新列'y_pred'
df_test['y_pred']=zdat.ds4x(y_pred,df_test.index,True)
# 调用ztq.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/907079
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!