2024年1月7日学习总结

目录

  • 今日计划学习内容
  • 今日学习内容
    • 1、argparse——命令行选项、参数、子命令解释器
    • 2、Python中的元组
      • (1)访问元组
      • (2)修改元组
      • (3)删除元组
      • (4)元组的运算
      • (5)元组索引和截取
      • (6)元组内置函数
    • 3、Python中的字典
      • (1)创建字典
      • (2)访问字典
      • (3)删除字典
      • (4)字典key的特性
      • (5)字典内置函数
    • 4、使用pytorch创建MLP模型
      • 之前用keras创建模型:
      • 现在看看如何使用pytorch创建模型:
      • 拆解一下这个模型的神经网络层
      • 查看模型
        • 1、查看模型结构
        • 2、查看模型每个参数model.named_parameters
    • 5、流量预测中的类:**TimeSeriesDataSet**

今日计划学习内容

  • 论文部分写一部分introduction
  • 对代码进行改进争取更加规范

今日学习内容

1、argparse——命令行选项、参数、子命令解释器

argparse 模块对命令行接口的支持是围绕argparse.ArgumentParser 的实例建立的。

举个栗子:

import argparse# 创建一个解析器对象
parser = argparse.ArgumentParser(description='A simple example of argparse usage')# 添加参数
parser.add_argument('--input_file', type=str, required=True, help='Path to the input file')
parser.add_argument('--output_file', type=str, required=True, help='Path to the output file')
parser.add_argument('--num_epochs', type=int, default=10, help='Number of epochs to train the model')
parser.add_argument('--learning_rate', type=float, default=0.01, help='Learning rate for the optimizer')# 解析参数
args = parser.parse_args()# 使用参数
print(args.input_file)
print(args.output_file)
print(args.num_epochs)
print(args.learning_rate)

说明:我们首先创建了一个argparse.ArgumentParser对象,并添加了三个参数:input_file、output_file和num_epochs。然后,我们调用parse_args()函数来解析命令行参数,并将解析结果存储在args对象中。最后,我们可以使用args对象访问解析结果

2、Python中的元组

Python 的元组与列表类似,不同之处在于元组的元素不能修改
元组使用小括号,列表使用方括号。
元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

tup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = "a", "b", "c", "d"
  • 元组中只包含一个元素时,需要在元素后面添加逗号
  • 元组与字符串类似,下标索引从0开始,可以进行截取,组合等。

(1)访问元组

使用下标

#!/usr/bin/pythontup1 = ('physics', 'chemistry', 1997, 2000)
tup2 = (1, 2, 3, 4, 5, 6, 7 )
print "tup1[0]: ", tup1[0] # tup1[0]:  physics
print "tup2[1:5]: ", tup2[1:5] # tup2[1:5]:  (2, 3, 4, 5)

(2)修改元组

元组中的元素是不能修改的
但是可以对两个元组进行连接

#!/usr/bin/python
# -*- coding: UTF-8 -*-tup1 = (12, 34.56)
tup2 = ('abc', 'xyz')# 以下修改元组元素操作是非法的。
# tup1[0] = 100# 创建一个新的元组
tup3 = tup1 + tup2
print tup3 # (12, 34.56, 'abc', 'xyz')

(3)删除元组

元组中的元素值是不能删除的
但是可以删除整个元组

tup = ('physics', 'chemistry', 1997, 2000)
del tup

(4)元组的运算

  • len(元组):计算元组中元素的个数
  • 元组+元组:把元组连接起来
  • 元组*4:把元组复制4次
  • 元素 in 元组:判断元素是否存在
  • for 元素 in 元组:迭代元组中的元素

(5)元组索引和截取

L = (‘spam’, ‘Spam’, ‘SPAM!’)

  • L[2]: ‘SPAM!’ 读取第三个元素
  • L[-2]: ‘Spam’ 反向读取,读取倒数第二个元素
  • L[1:]: (‘Spam’, ‘SPAM!’) 截取第二个元素到最后一个元素

(6)元组内置函数

  • cmp(tuple1, tuple2):比较两个元组元素
  • len(tuple):计算元组元素个数。
  • max(tuple):返回元组中元素最大值。
  • min(tuple):返回元组中元素最小值。
  • tuple(seq):将列表转换为元组。
    参考:https://www.runoob.com/python/python-tuples.html

3、Python中的字典

字典是可变容器模型,且可存储任意类型对象。
字典的每个键值 key:value 对用冒号分割,每个键值对之间用逗号分割,整个字典包括在花括号 {} 中

d = {key1 : value1, key2 : value2 }
  • 键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一
  • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组

(1)创建字典

  • 直接赋值
dic = {'name': 'Jack', 'age': 18, 'height': 180}
print(dic)
# 输出结果:{'name': 'Jack', 'age': 18, 'height': 180}
  • dict和参数创建
dic = dict(name='Jack', age=18, height=180)
print(dic)
# 输出结果:{'name': 'Jack', 'age': 18, 'height': 180}
  • dict和二元组的列表创建
lis = [('name', 'Jack'), ('age', 18), ('height', 180)]
dic = dict(lis)
print(dic)
# 输出结果:{'name': 'Jack', 'age': 18, 'height': 180}
  • dict和zip创建
dic = dict(zip('abc', [1, 2, 3]))
print(dic)
# 输出结果:{'a': 1, 'b': 2, 'c': 3}
  • 字典推导式创建
dic = {i: i ** 2 for i in range(1, 5)}
print(dic)
# 输出结果:{1: 1, 2: 4, 3: 9, 4: 16}

(2)访问字典

通过key访问value

#!/usr/bin/pythontinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}print "tinydict['Name']: ", tinydict['Name'] # tinydict['Name']:  Zara
print "tinydict['Age']: ", tinydict['Age'] # tinydict['Age']:  7

(3)删除字典

分为三种:删除字典里面的某一个key的value、删除字典的所有key-value对、删除字典

tinydict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
del tinydict['Name']  # 删除键是'Name'的条目
tinydict.clear()      # 清空字典所有条目
del tinydict          # 删除字典

(4)字典key的特性

字典value可以是任意的类型,但是key有具体的要求

  • 同一个key不能出现两次,如果出现了两次,之后后一个的value会被记住
  • key必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行

(5)字典内置函数

  • cmp(dict1, dict2):比较两个字典元素。
  • len(dict):计算字典元素个数,即键的总数。
  • str(dict):输出字典可打印的字符串表示。
  • type(variable):返回输入的变量类型,如果变量是字典就返回字典类型。
  • dict.clear():删除字典内所有元素
  • dict.copy():返回一个字典的浅复制
  • dict.fromkeys(seq[, val]):创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
dic = dict.fromkeys(range(4), 'x')
print(dic)
# 输出结果:{0: 'x', 1: 'x', 2: 'x', 3: 'x'}
  • dict.get(key, default=None):返回指定key的value,如果值不在字典中返回default值
  • dict.has_key(key):如果键在字典dict里返回true,否则返回false。Python3 不支持。
  • dict.items():以列表返回可遍历的(键, 值) 元组数组
  • dict.keys():以列表返回一个字典所有的键
  • dict.setdefault(key, default=None):和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
  • dict.update(dict2):把字典dict2的键/值对更新到dict里
  • dict.values():以列表返回字典中的所有值
  • pop(key[,default]):删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
  • popitem():返回并删除字典中的最后一对键和值。

4、使用pytorch创建MLP模型

之前用keras创建模型:

model_mlp = Sequential()
model_mlp.add(Dense(100, activation='relu', input_dim=X_train.shape[1]))
model_mlp.add(Dense(1))
model_mlp.compile(loss='mse', optimizer=adam)
model_mlp.summary()

现在看看如何使用pytorch创建模型:

class MLP(nn.Module):'''Multilayer Perceptron.'''def __init__(self):super().__init__()self.layers = nn.Sequential(nn.Flatten(),# input shape = 28*28# neurons in first dense layer = 64nn.Linear(28*28, 64),# relu activationnn.ReLU(),# 64 = neurons in first dense layer# 32 = neurons in second dense layernn.Linear(64, 32),nn.ReLU(),# 32 = neurons in second dense layer# 10 = neurons in output layer (number of classes)nn.Linear(32, 10))def forward(self, x):'''Forward pass'''return self.layers(x)

pytorch创建神经网络模型(MLP)需要继承nn.Module类,有两个组成部分:init/构造函数forward

  • init:定义模型中的参数,权重、偏置等
  • forward:定义模型接收输入时,数据要怎么传递、经过哪些激活函数等

其中在init里面通过nn.Sequential创建一个“存储仓”模型,一个接一个的往里填入layers,存储在变量self.layers中

拆解一下这个模型的神经网络层

  • 输入:数据维度是(3,28,28)
  • nn.Flatten:输入为一批数据,第一维为batch,通常要把一个数据拉成一维,而不是将一批数据拉为一维。默认从第二维开始平坦化。
    (3,28,28)➡️(3,784)
  • nn.Linear:线性变换 nn.Linear(in_features=28*28, out_features=64)
    (3,784)➡️(3,64)
  • nn.Relu:非线性激活函数
    (3,64)➡️(3,64)
  • nn.Linear:线性变换 nn.Linear(in_features=64, out_features=32)
    (3,64)➡️(3,32)
  • nn.Relu:非线性激活函数
    (3,32)➡️(3,32)
  • nn.Linear:线性变换 nn.Linear(in_features=32, out_features=10)
    (3,32)➡️(3,10)

查看模型

1、查看模型结构
print(f"Model structure: {model}\n\n")
2、查看模型每个参数model.named_parameters
for name, param in model.named_parameters():print(f"Layer: {name} | Size: {param.size()} | Values : {param[:2]} \n")

5、流量预测中的类:TimeSeriesDataSet

功能:时间序列预测的时候对数据进行预处理的“好帮手”
功能包括:

  • 变量缩放和编码:对于不同的变量,可以通过指定缩放方法和编码方法来将其归一化,并减少变量之间的差异性,从而提高模型的效果。
  • 目标变量归一化:对于时间序列中的目标变量,可以对其进行归一化,以便更好地适应模型。
    数据转换:该类提供了一些方法,可以将时间序列数据从 pandas 数据框中转换为 PyTorch 张量,以便更好地适应 PyTorch 模型。
  • 变量信息的保存:该类可以保存关于未来已知和未知的静态和时变变量的信息,以便更好地处理多个时间步长的时间序列数据。
  • 相关类别信息的保存:该类可以保存与时间序列数据相关的类别信息,例如假日信息等,以便更好地处理具有类别信息的时间序列数据。
  • 数据增强:该类提供了下采样的功能,可以对时间序列数据进行降采样,以便更好地处理长时间序列数据。
  • 数据集生成:该类可以自动生成训练、验证和测试数据集,以便更好地进行模型评估和测试。
class pytorch_forecasting.data.timeseries.TimeSeriesDataSet(
data: DataFrame, 
time_idx: str, 
target: str | List[str], 
group_ids: List[str],
weight: str | None = None, 
max_encoder_length: int = 30, 
min_encoder_length: int | None = None, 
min_prediction_idx: int | None = None, 
min_prediction_length: int | None = None, 
max_prediction_length: int = 1, 
static_categoricals: List[str] = [], 
static_reals: List[str] = [],
time_varying_known_categoricals: List[str] = [], 
time_varying_known_reals: List[str] = [], 
time_varying_unknown_categoricals: List[str] = [], 
time_varying_unknown_reals: List[str] = [], 
variable_groups: Dict[str, List[int]] = {}, 
constant_fill_strategy: Dict[str, str | float | int | bool] = {}, 
allow_missing_timesteps: bool = False,
lags: Dict[str, List[int]] = {}, 
add_relative_time_idx: bool = False, 
add_target_scales: bool = False, 
add_encoder_length: bool | str = 'auto', 
target_normalizer: TorchNormalizer | NaNLabelEncoder | EncoderNormalizer | str | List[TorchNormalizer | NaNLabelEncoder | EncoderNormalizer] | Tuple[TorchNormalizer | NaNLabelEncoder | EncoderNormalizer] = 'auto', categorical_encoders: Dict[str, NaNLabelEncoder] = {}, 
scalers: Dict[str, StandardScaler | RobustScaler | TorchNormalizer | EncoderNormalizer] = {}, randomize_length: None | Tuple[float, float] | bool = False, predict_mode: bool = False)

参数:

  • data:包含时间序列的DataFrame或numpy数组
  • time_idx: str。表示时间的列名。该列用于确定样本的时间序列。
  • target: Union[str, List[str]]。目标列或目标列的列表,可以是分类变量或连续变量。
  • group_ids: List[str]。表示时间序列的列名的列表。这意味着 group_ids 与 time_idx 一起确定样本。如果只有一个时间序列,则将其设置为恒定的列名即可。
  • weight: Union[str, None]。权重的列名。默认为 None。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605823.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

excel 按照姓名日期年份分组求和

excel 需要按照 姓名 日期中年份分组求和,目前想到 sumifs函数,大概需求如下: 表格数据大概如下 ABC姓名日期金额a2022/2/1542a2023/4/5154b2023/3/5100 统计结果如下: ABC1姓名2022年2023年2a5421543b100 对应公式 如下 --算…

【linux学习】linux概述

1. linux概述 操作系统主要的功能有两个部分,一是更有效率的控制计算机硬件资源(主要通过核心来控制),二是为程序设计师提供更容易开发软件的环境(系统呼叫提供软件开发环境)。linux就是一套操作系统&…

「许战海战略文库」从日本消费趋势看中国食品的第二招牌

在日本消费趋势的映射下,中国的食品行业面临着独特的转型机遇。品类品牌时代的终结及其在美元霸权经济下的起落,以及中国企业如何在改革开放四十年市场红利结束后继续成长,面对内卷式竞争,中国食品企业如何寻找新的增长路径&#…

【JaveWeb教程】(1)Web前端基础:HTML+CSS入门不再难:一篇文章教你轻松搞定HTML与CSS!

目录 1. 前端开发介绍2. HTML & CSS2.1 HTML快速入门2.1.1 操作2.1.2 总结 2.2 开发工具2.3 基础标签 & 样式2.3.1 新浪新闻-标题实现2.3.1.1 标题排版2.3.1.1.1 分析2.3.1.1.2 标签2.3.1.1.2 实现 2.3.1.2 标题样式2.3.1.2.1 CSS引入方式2.3.1.2.2 颜色表示2.3.1.2.3 …

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述

【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax概述 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax快速入门 【大数据进阶第三阶段之Datax学习笔记】阿里云开源离线同步工具Datax类图 【大数据进阶第三阶段之Datax学习笔记】使用…

python数据可视化之地图绘制案例分析

在数据可视化领域,地理信息的展示有着无可替代的价值。本篇笔记将通过Python的pyecharts库实现一个中国直辖市GDP数据的地图分布可视化示例,帮助读者了解如何利用该工具进行地图数据渲染。 1. 导入所需模块 首先,我们需要导入pyecharts库中…

Sage运行pwntools库脚本异常解决:OSError: Int or String expected

需要和Oracle交互的密码学脚本一般都需要借助pwn库的帮助,今天切换了python版本后,出现了一个异常(OSError: Int or String expected,详细异常见文章),查阅一下源码后简单的解决了这个问题,在此…

OpenAI 也在 996?一位离职员工自白:代码贡献第四,经常工作 6 天丨 RTE 开发者日报 Vol.121

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE (Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

在python中_signal= pyqtSignal(object) 怎么c++中 像这样统一传递 object

在python中_signal pyqtSignal(object) 怎么c中 像这样统一传递 object? 在C的Qt中,信号的参数类型需要明确指定,因为C是静态类型语言。如果你想要传递一个通用的对象,你可以使用QVariant,它是Qt的一个通用容器类,能够…

SpringClould微服务+分布式事务笔记

SpringClould微服务 拆分项目步骤&#xff1a; 创建模块 导入依赖 复制启动类 复制配置文件 application.yaml 复制有关此模块的代码&#xff08;domain、controller、service、mapper&#xff09; 新建数据库 配置启动项服务注册&#xff1a; <!--nacos 服务注册发现--&…

Prometheus Blackbox_exporter笔记

一、安装Promtheus 在 Prometheus 官网 Download | Prometheus 获取适用于 Linux 的 Prometheus 安 装包&#xff0c;这里我选择最新的 2.46.0 版本&#xff0c;我是 Linux 系统&#xff0c;选择下载 prometheus-2.46.0.linux-amd64.tar.gz 下载安装包&#xff1a; wget htt…

Gateway相关问题及答案(2024)

1、什么是API Gateway&#xff1f;它在微服务架构中有什么作用&#xff1f; API Gateway是一个服务器&#xff0c;通常是一个可以管理和处理所有进出应用程序的请求的反向代理。在微服务架构中&#xff0c;它作为单一的入口点&#xff0c;统一接收来自客户端的调用请求&#x…

多国管理中心多语言区块链源码一元夺宝程序仿趣步奕跑/原生计步器/原生人脸识别

前后台分开的&#xff0c;后台是TP3.2的框架了&#xff0c;应该是比较老的程序了。 目前把整体UI 改版黄色系风格&#xff0c;集成了一元夺宝程序&#xff0c;用户数据同步趣步&#xff0c;效果看起来很棒&#xff0c;另外加入股票走势图&#xff08;K线图&#xff09;&#xf…

世微AP5126宽电压12-80V 1.5A平均电流型LED降压恒流驱动内置IC

产品描述 AP5126 是一款 PWM 工作模式,高效率、外 围简单、内置功率管&#xff0c;适用于 12-80V 输入的高 精度降压 LED 恒流驱动芯片。输出功率可达 15W&#xff0c;电流 1.2A。 AP5126 可实现全亮/半亮功能切换&#xff0c;通过 MODE 切换&#xff1a;全亮/半亮/循环模式…

创建数据库用户

要在MySQL数据库中创建用户&#xff0c;您可以使用以下命令&#xff1a; CREATE USER usernamelocalhost IDENTIFIED BY password;其中&#xff0c;username是您要创建的用户名&#xff0c;localhost表示用户只能从本地连接到数据库&#xff0c;password是用户的密码。 如果要…

使用 Jamf Pro 和 Okta 工作流程实现自动化苹果设备管理

Jamf的销售工程师Vincent Bonnin与Okta的产品经理Emily Wendell一起介绍了JNUC 2021的操作方法会议。它们涵盖了Okta工作流程&#xff08;Okta Workflow&#xff09;&#xff0c;并在其中集成了Jamf Pro&#xff0c;构建了一些工作流程&#xff0c;并提供了几个用例。 Okta 工作…

开发板VS评估板

共性 该设计是围绕特定组件构建的&#xff0c;使设计人员能够在已知可以正常工作的组装板上对该组件进行试验。所有数字和模拟接口都暴露在连接器和/或测试点处&#xff0c;以便可以连接外围设备和其他评估/开发板。基本功能所需的其他支持电路&#xff08;例如电源调节或天线…

HTML5和JS实现明媚月色效果

HTML5和JS实现明媚月色效果 先给出效果图&#xff1a; 源码如下&#xff1a; <!DOCTYPE html> <html> <head><title>明媚月光效果</title><style>body {margin: 0;overflow: hidden;background-color: #000; /* 添加一个深色背景以便看到…

SSM医院预约挂号系统【源码】【最详细运行文档】

SSM医院预约挂号系统【源码】【最详细运行文档】 系统简介系统涉及系统运行系统演示源码获取 系统简介 随着医疗水平的提高&#xff0c;以及人们对于健康的观念越来越重视&#xff0c;出入医院成了一种常见的现象。而随着看病人数增多&#xff0c;经常出现挂号难的现象。一部分…

ME8206 电流模式准谐振 PWM 控制器 输出功率可达100W

描述&#xff1a; ME8206 是一个电流模式准谐振 PWM 控制器&#xff0c;在 85V-265V 的宽电压范围内提供高达 100W 的输出功率&#xff0c; 在大范围的负载和输入电压变化情况下确保谷底电压导通。 ME8206 采用高压启动设计&#xff0c;芯片直接连接到高压&#xff0c; 以提供芯…