【完结】cyの破三之旅(上篇)(20240313~20240331)


序言

在过去一个多月里,我又如期搞砸一些事。

有些事不去做会遗憾,做完也很自责。

经年如此,已经习惯了。

但是这次破三,我一定不会再搞砸了。(FLAG已立,完篇收FLAG

PS:真的勇士,就要敢往身上插满FLAG!!!

在这里插入图片描述


20240313(扬/芜18日,澄32日,通39日)

  • 昨晚会开到10点多,太浪费生命,近9点溜出来把训练补了。15km有氧跑到操场关门,用时1:04:59,平均配速4’20",平均心率155bpm,最大心率160bpm。这个心率去年11月最多扛到4’45"的配速,中间陪胡哥5km,@4’15"/km(胡哥昨晚同样15km,在为3.17的南京半马备赛,目标130,但呼吸完全乱了),心率都没有超过160bpm,难以置信的轻松,30圈后都能很流畅地开麦说话。
    在这里插入图片描述在这里插入图片描述
  • 今晚约嘉伟训练,因为我俩备赛周期不同,趁3.24锡马备赛还没进入减量期,跟他再好好上点强度。计划4分起步,按体感慢慢加,跑10km以上。
  • 虽然每次都这么讲,但从来没有4分起步过。从最后分段配速来看,我俩只在慢慢加这三个字上做到诚信。5000米过线18’58",我告诉嘉伟有望进38分,嘉伟说那我开始提速咯。6000米嘉伟告诉我LXY来了(开学之后到现在再没当面说过话,跑完后,我追上她说了两句,然而根本不理我,唉)。
  • 8000米后,我连续踩他3次脚,嘉伟以为我是控制不住身体,其实我觉得还能再快一些。8500米处我超越嘉伟,顶到3’35"以内,9600米嘉伟上来帮我拉住最后一圈速度。最终37’40"大幅PB万米。现在终于可以自信地说,财大现役中长跑,嘉伟之下,再无对手。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

单根进度条不重复显示的写法

from tqdm import tqdm

def train(total, epoch):
	pbar = tqdm(total=total, bar_format='{l_bar}{r_bar}', dynamic_ncols=True)
	pbar.set_description('Epoch {}'.format(epoch))
	for i in range(total):
		fields = {
			'loss': random.random(), 
			'accuracy': random.random(), 
			'recall': random.random(),
		}
		pbar.set_postfix(**fields)
		pbar.update()
if __name__ == '__main__':
	total = 1024	
	n_epoch = 16
	for epoch in range(1, 1 + n_epoch):
		train(total=total, epoch=epoch)
  • 注意这种写法要求外循环体for epoch in range(1, 1 + n_epoch)中不含有print的内容, 否则依然会输出很多行;
  • set_description可以直接用参数tqdm(response.iter_content(self.chunk_size), desc='Download process', total=total)中的desc参数取代
  • 不带有__len__方法的迭代器需要手动提供total参数才能显示进度条。

20240314(扬/芜17日,澄31日,通38日)

  • 我很想这周末就能比赛,因为夜长梦多,害怕接下来状态下滑,毕竟再想提升很难,感觉已经摸到天赋上限。昨晚最后两圈我是扯着喉咙,摇头晃脑才顶下来,22圈时,嘉伟说还有2圈,叫我一定要顶住不掉速;跑到一半忽然说不对呀,是3圈,差点给我整崩溃了。
  • 今日想减量,但临时带LZR长距离,小伙子天选之子(他也是新疆人,不过应该是兵团,跟DGL土生土长的完全不同,样貌上不大看得出区别),大一首次报名就中签锡马(中签率3%),羡慕死我。
  • 跑前先做30箭步×8组(+20kg),等他热身。决定带有氧,从4’50"慢慢加到4’35",他很不错地顶了下来,心率到180bpm(我其实150bpm都不到,完全是走路强度)。10km后他下场,我也应该停下,但忍不住还是冲2000米到力竭(用时7’35")。如今虽是全盛状态,但连续六天10km以上,负荷太大,肌肉疲劳,右跟腱有疼痛感。太急于求成,明日跑休,必须好好恢复一天。
  • 我一般不制定训练计划,从来热身结束才定,跑到一半也可能改动(比如昨晚就没想过测万米,5000米后才觉得可以PB)。毕竟我们不是职业跑者,时间有限,无法规律地保障饮食和睡眠,也缺少专业的恢复手段,严格地按课表训练,要么过量,要么达不到强度,所以找个搭子一起训练很有效。但普通人很难找到状态水平都相当的人,跑步远远不比球类运动有趣,更多时候都是一个人的事情。
  • 还有一点,舍得跑慢些,学会休息,跑步并非一蹴而就,不是今天跑了,明天就能看到提升。路真的很长,若是竭尽全力也追不上前方的兔子,别忘了你的背后,一定还有可以陪伴行走的人。
    在这里插入图片描述在这里插入图片描述

selectolax对比xpath(lxml库解析元素树使用的是xpath),效率约为lxml的2~3倍

# -*- coding: utf-8 -*-
# @Author: markadc
import time
import requests
from lxml import etree
from selectolax.parser import HTMLParser

url = "https://www.baidu.com"
html = requests.get(url).text

print("Use XPath ...")
start= time.time()
for _ in range(10000):
    tree = etree.HTML(html)
print(f"  - Run {time.time() - start} seconds")

print("Use selectolax ...")
start= time.time()
for _ in range(10000):
    tree = HTMLParser(html)
print(f"  - Run {time.time() - start} seconds")

但是接下来使用tree = HTMLParser(html)得到的树,是不支持XPath的,可以使用CSS选择器:

查找demo节点下的所有子节点:demo > *

for node in tree.css("demo > *"):
    print(node.tag)

查找demo节点下的所有子孙节点:demo >> *

for node in tree.css("demo >> *"):
    print(node.tag)

查找href属性值含有http的所有节点:[href*=“http”]

for node in tree.css('[href*="http"]'):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

查找所有href属性值以https开头的a节点:a[href^=‘https’]

for node in tree.css("a[href^='https']"):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

查找所有href属性值以png结尾的节点:[href$=‘png’]

for node in tree.css("[href$='png']"):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

查找有id属性的a节点或者li节点:a[id], li[id]

for node in tree.css("a[id], li[id]"):  #
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

查找id值含有python的所有节点:*[id*=‘python’]

for node in tree.css("*[id*='python']"):
    args = node.tag.ljust(10), node.text(strip=True).ljust(10), node.attributes
    print("标签={} 文本={} 属性={}".format(*args))

20240315(扬/芜16日,澄30日,通37日)

  • 跑休日(补核心训练,腰腹大有提升,同侧单手单脚可以支撑很久,侧平板支撑也能轻松做几分钟,一整块的腹肌终于也隐约分块),中午去小姨家蒸小公鸡吃(都是老妈过年带的存货),还不错,虽然现在每天在学校也能吃到鱼,但家里的肉到底不一样。
  • 明天是AK和嘉伟在3.24锡马前最后一次长距离课,AK应该一大早去世纪公园参加NIKE黑马集训(25K)。我也计划跟嘉伟25K以上,毕竟嘉伟年后到现在还没拉过长距离,三月份我也缺一次长距离拉练。后天最好下雨,给我个理由去打球,真的好久没打球了。
  • 办手续,顺便取实习证明。互联网这行有没有这张纸区别真心不大,打了几段工,从没要过,但慧悦姐坚持给我搞一份,还写了段评语。彼之待我以善,吾自当尽之所能,感谢宝玺姐、专哥、慧悦姐这六个月的陪伴,真的给我带来很多改变。
    在这里插入图片描述

CSS Selector确实不如XPath好用,最多做一些简单的模糊匹配:

[id^='start']{ // 匹配以start为开头的id选择器
   color: red;
}
[id$='end'] { // 匹配以end为结尾的id选择器
  color: blue;
}
[class^='start']{ // 匹配以start为开头的class选择器
   color: red;
}
[class$='end'] { // 匹配以end为结尾的class选择器
  color: blue;
}
document.querySelector("[id^='start']") // 选择id以start为开头的元素

但是XPath可以直接用正则来匹配:

etree = lxml.html.fromstring(html)
ns = {"re": "http://exslt.org/regular-expressions"}
etree.xpath("//div[re:match(@class,'<正则表达式>')]", namespaces=ns)

importlib.import_module(module)手动加载模块

记录一下GPT-4-TURBO,CHATGLM3,文心一言3.5对下面这个倒序输出问题的结果对比(令人惊讶,文心一言竟然做得最好的

GPT4(仅仅只错了一个词对)
在这里插入图片描述

GLM3(错了一大堆,可能逻辑是把分词的结果倒序,但是与prompt中给定的例子是不符的)

文心一言(严谨完美的推导过程)

分享链接:https://yiyan.baidu.com/share/U7fcVqUIij

---

文心大模型3.5生成
1.“我是一个中国人”的倒序输出结果,是“人国中个一是我”; 
2.“今天我早饭吃了一个鸡蛋”的倒序输出结果,是“蛋鸡个一了吃饭早我天今" 

请根据上面两个倒序输出结果的规律,输出下面一段文字的倒序输出结果: "极速有效地提升工作效率,聪明一点,每天少工作一小时!"

---

题目的要求是将原文倒序写,我们需要罗列原文的每一个字,并按照相反的顺序将每个字组合成倒写的新句子。

句子原文:极速有效地提升工作效率,聪明一点,每天少工作一小时!

按照正序开始数,每个字分别是:

极
速
有
效
地
提
升
工
作
效
率
,
聪
明
一
点
,
每
天
少
工
作
一
小
时
!
倒序组合后新的句子为:!时小一作工少天每,点一明聪,率效作工升提地效有速极

所以,答案是“!时小一作工少天每,点一明聪,率效作工升提地效有速极”。

20240316(扬/芜15日,澄29日,通36日)

  • 糊涂一日,各种事情都有些失落。
  • 早上跟NIKE黑马25K定速耐力(世纪公园5圈,D组354-402,C组347-353),和嘉伟一起跑D组,AK跑C组。D组带到355,雨天路滑,不到两圈我就爆了,前后一共跟了10K(第一次来世纪公园跑,全是晨跑的人,气氛特别好,355的配速怎么都该能顶得住,竟然这么快就不行,好失望好失望)。嘉伟三圈也被拉爆,15K均配355,AK顶完C组,25K均配344。
  • 早上完全不到位,不甘心,下午决定再补一练。但太阳很晒,带LZR摇了10K,帮他备赛锡马,445的配速心率都上到160bpm,特别吃力。结束还是觉得不到位,但已经不知道该再练啥,跑了3个400米间歇(115,118,120,三而竭)。跟没头苍蝇似的无脑堆量,感觉腿都疼了,得不偿失。
  • 教训:
    • 实力硬伤,其他都是借口。
    • 最近再大强度都能顶下来,身体恢复得又快,几乎没有伤痛,以至预期过高。但状态有起就有落,戒骄戒躁,接受落差
    • 很少早上训练,现在反而是晚上状态是最好,甚至比下午好,但是比赛都是一大早,尽快适应
    • 身体并没有充分恢复,早上前程很兴奋,甚至一度领跑,5K后右跟腱又有点疼(场地跑的弊病,以前总以为场地跑左侧承重,应是左侧易伤;但速度上去后,弯道右侧步幅大得多,反而右侧易伤
    • 粉色的Vapofly鞋底磨平(来不及去管理室换鞋子了,如果穿黄色那双,今早或许能尽兴些),左外掌缺一大块,又雨天打滑,跑得不稳
  • PS:AK真居家好男人,晚上跟我讲去他家吃饭,他亲自下厨,可惜我已经早蜀地源大快朵颐,不然真该去跟AK学两手。
    在这里插入图片描述

Docker目前只支持64位系统(转载):

初始化:

systemctl stop firewalld
setenforce 0
  1. 安装依赖:

     yum install -y yum-utils device-mapper-persistent-data lvm2
    

    yum-utils:提供了 yum-config-manager 工具。
    device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
    device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

  2. 设置阿里云镜像:

    yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
    
  3. 设置开机启动:

    yum install -y docker-ce docker-ce-cli containerd.io
    
  4. 服务的启动与停止:

    systemctl start docker.service
    systemctl enable docker.service 
    

安装好的Docker系统有两个程序,Docker服务端和Docker客户端。其中Docker服务端是一个服务进程,负责管理所有容器。 Docker客户端则扮演着Docker服务端的远程控制器,可以用来控制Docker的服务端进程。大部分情况下Docker服务端和客户端运行在一台机器上。

一些简单的命令:

docker version # 查看版本
docker info # 查看信息
docker search nginx # 搜索nginx镜像
docker pull nginx # 拉取nginx镜像

镜像加速:

浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加速器配置

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["*****************************"]
}
EOF
systemctl daemon-reload
systemctl restart docker

# #查看镜像信息
# 镜像下载后存放在 /var/lib/docker 。
# Docker 相关的本地资源存放在 /var/lib/docker/ 目录下,其中 containers 目录存放容器信息,image 目录存放镜像信息,overlay2 目录下存放具体的镜像底层文件。
cat /var/lib/docker/image/overlay2/repositories.json

20240317(扬/芜14日,澄28日,通35日)

  • 放了三天风筝,WYL终于急了。越急,我越是坑你。尊重是相互的,我自以为并不亏欠什么,求人办事,总得拿出点儿诚意。
  • 傍晚起风,与AK诚信415慢跑,最后冲了1000米(3’42"),平均心率155bpm,非常满意的心率。聊了一路,AK这次野心很大,锡马目标240(平均配速3’47"/km,从他昨天的25K表现来看,这个目标并非不可能),目前他的PB是本科跑出的241(也就是说能进240就是PB)希望他也能如愿。倘若一天,无论如何都难以接近过去的成绩,一定会丧失继续跑下去的动力。跑步是枯燥的,没有目标和追求,绝无可能会长久地坚持。
  • 3月3日NRC招募通过,很神奇,我本来只是想去碰碰运气,因为仅参加过两场半马,成绩尚不突出,全马更是从没跑过,大概面试和体测的表现确实还行。将来或许真的有机会作为配速员上场,领着那些和从前自己一样的新手跑完比赛。面试按下不表,至少体测时对节奏感的把握很准,毕竟有乐理基础,那天体测有几人就很作,说好按音乐节奏跑,非搁那儿冲刺再等,又不是比谁快,想快到Lv.10后自见分晓。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

查看本地已有的所有镜像:

docker images

REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
nginx        latest    ae2feff98a0c   9 days ago   133MB

REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;

根据镜像的唯一标识 ID 号,获取镜像详细信息
格式:docker inspect <镜像ID号>

docker inspect ae2feff98a0c
  • lowerdir是镜像层,目录或者文件是只读的,其实就是rootfs,image layer可以分很多层,所以对应的lowerdir是可以有多个目录
  • upperdir是在lowerdir之上的容器层,这层是可读可写的,在启动一个容器时候会进行创建,所有的对容器数据更改都发生在这里层
  • MergedDir是表现层,是容器的挂载点

为本地的镜像添加新的标签

格式:docker tag 名称:[标签] 新名称:[新标签]

docker tag nginx:latest nginx:web
docker images | grep nginx

删除镜像

格式:

docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签

或者

docker rmi 镜像ID号 #彻底删除该镜像

注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。

docker rmi nginx:web

20240318(扬/芜13日,澄27日,通34日)

  • 晚上细雨,LZR独自在操场跑完半马(@5’04"/km),真不错,大一就能跑半马,假以时日,科学训练,必有所为。
  • 鸽了WYL三天,昨晚看他实在可怜,还是替他把稿子完善了下。中午约他吃饭,当面好好跟他表达了我的意见(这学期每次开会我都当众喷他,群里讨论也喷,他心里总归有点数),以及为什么鸽他这么多天。从本科就跟着他混,这么多年,他啥脾性我还是有点数,心并不坏,就是有些既得利益者的守成,很无奈。虽然并不想去向上管理,但老大哥们都陆续毕业,一届不如一届,我不喷谁来喷。
  • 下楼吃晚饭迎面撞到宋某,骑着他那新买的GIANT(¥1899),有段时间不跟他扯淡,拉他去新食堂吃饭。上周训练50米冲刺拉伤大腿,今年不是在恢复,就是在养伤。不知道他最近心思在哪儿,莫名其妙到上外跟了个户外社团走徒步线。也挺好吧,找件事儿做着,别太颓废。
  • 三月份目前总跑量151.2km,平均配速4’12/km,到月底铁定200km+,基本到位,今晚不太想跑,感觉跑再多意义也不大,决定做点专项力量训练,针对目前最大的弱点——右跟腱(现在发现右侧跑久确实疼,哪里弱就练哪里)。3000×单摇(23分钟整,单脚交替,重心刻意落在右脚)、200×双摇,左右各100次提踵,200次台阶交替步,本来还想爬楼梯,但是感觉有些疲累,还是好好休息。
  • PS:今天新食堂中午红烧鱼,晚上清蒸鱼,口味不同,都很好吃,一顿吃两条。阿姨现在看到我,就提醒我今天有鱼吃,真好(^_^) 。

目前几个adapters工具包,感觉很乱:

  1. transformers自带Adapter
from transformers import BertForSequenceClassification
from transformers import AdapterType, MultiLingAdapterArguments, HfArgumentParser, AdapterConfig

model = BertForSequenceClassification.from_pretrained(model_name, num_labels=n_label)
parser = HfArgumentParser((MultiLingAdapterArguments))
adapter_args = parser.parse_args_into_dataclasses()[0]
adapter_config = AdapterConfig.load(
                adapter_args.adapter_config,
                non_linearity=adapter_args.adapter_non_linearity,
                reduction_factor=adapter_args.adapter_reduction_factor,
                )
model.add_adapter('test', AdapterType.text_task, config=adapter_config)
print(model.config.adapters.adapter_list(AdapterType.text_task))
model.set_active_adapters(['test'])
  1. 用adapters加载:
!pip install -U adapters # py38以上
from adapters import AutoAdapterModel

model_path = r"D:\resource\model\huggingface\common\bert-base-uncased"
adapter_path = r"D:\resource\model\huggingface\AdapterHub\bert-base-uncased-pf-hotpotqa"

model = AutoAdapterModel.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model.load_adapter(adapter_path, set_active=True)

PS:我发现这上面AutoAdapterModel导的model也可以调用model.add_adapter方法

  1. 还有一种用adapter-transformers
!pip install -U adapter-transformers # py38以上

貌似都不用导包

encoder = AutoModel.from_pretrained(args.bert_name)
# Add a new adapter
encoder.add_adapter("rotten_tomatoes")
# Activate the adapter
encoder.train_adapter("rotten_tomatoes")
classify = Classify(args.hidden_size, 1)
encoder_optimizer = AdamW(params=encoder.parameters(),
                lr = args.learning_rate_bert, # args.learning_rate - default is 5e-5
                eps = 1e-8, # args.adam_epsilon  - default is 1e-8.
                correct_bias = False
                )

20240319(扬/芜12日,澄26日,通33日)

  • 最近两日被迫熬夜,近两点才熄灯,肉眼可见的状态下滑,无可奈何。中午补觉,计划下午跑个4分配20km,但到10km就崩了(腿脚无碍,是心肺崩了,太阳直晒,全程都在175bpm左右,一个人很难顶住),39’05",均配3’54"。嘉伟减量休整,之后几天应该就顺顺腿,等候锡马开赛。
  • 之前有段时间,每天都能七点半睡到自然醒,现在没有缺少硬性约束,晚上总拖太久,作息太不规律。决心接下来提前熄灯,必须把起床时间逐渐调整到七点前,下周争取晨跑几天,适应比赛节奏。
  • 最近两三个月,只要在操场,我都会拉会儿单杠,虽然菜得真实,但总归看到点长进。下午试了试弹力带引体和俯卧撑。去年只用一根黄色完全拉不上去(红色才勉强能拉),今年已经可以一根黄色拉起来两三个全程引体,半程能到四五个;俯卧撑也能比较标准地一组做10个。
  • 接下来应该都是独自训练。计划周四晚最后做一回力量,下周正式减量,控制饮食,调整作息。一切安好,加油。
  • PS:下午东哥带队打了一个多小时篮球,不知道地还以为是篮球队😂。LXY估计是已经接任LTY做队长了,确是资历最老的队员(都没有之一了)。
    在这里插入图片描述在这里插入图片描述

镜像操作

存出镜像:将镜像保存成为本地文件

格式:docker save -o 存储文件名 存储的镜像

docker save -o nginx nginx:latest			#存出镜像命名为nginx存在当前目录下
ls -lh

载入镜像:将镜像文件导入到镜像库中
格式:docker load < 存出的文件 或者 docker load -i 存出的文件

docker load < nginx

上传镜像

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。https://hub.docker.com

可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。

docker tag nginx:latest 自己的账号/nginx:web #添加新的标签时必须在前面加上自己的dockerhub的username
docker login #登录公共仓库
Username:自己的账号
password:abc123456
docker push 自己的账号/nginx:web #上传镜像

20240320(扬/芜11日,澄25日,通32日)

  • 昨晚下会,九点半,逛了一圈操场,遇胡哥,陪着摇20分钟。他3.17南京半马前一晚还在干活,完全没有兴奋起来,4’30"匀速摇完仍有余力(136完赛),决定还是去参加4.21淮安全马,计划之后工作日每天跑1小时,堆跑量。
  • 上个月,胡哥跟我讲,种种压力,不想去淮安了。但这次半马结束,未能如愿(他目前三场半马成绩都是134-136,但这次肯定是想进130),想想还是把首马跑了,而且淮安对他也是羁绊,不想留下遗憾。唉,谁不是呢。
  • 下午4点力量训练(30箭步×12组,负重20kg,原计划周四力量,但临时跟嘉伟去129)。路上看到LXY在大活门口跑过,4:30又跑回操场,估计跑了得有1小时出头,速度很快,很用力,脸都红了。想着要不买瓶水搭个话,结果刚买完人就没了,唉,日常自作多情。
  • 晚饭后陪亦童打一小时球(上次还是2月23日,真好久不打,嘉伟倒是打得挺勤快,就是约不到人)。最近每天反手做50次挥拍,总算有点发力感。目前弱点还是步伐,重心不稳,而且不知怎么把球打低,小球控不好,总想打高远,亦童个子太高,被他杀得满地找牙。好,这仇我记下了。
  • 最后八点多陪AK跑10K,其实状态不错,前5000米@3’57"很轻松,可以顶完10K。但AK到一半肚子疼,只好原地等他,停下后大腿发酸,后5000米@4’07"有些吃力。NIKE黑马给AK发的新鞋next%3跑锡马,接下来我也能从NRC白嫖些服装和鞋子,搞双口粮鞋慢跑也不错,NIKE性能确实没得黑,但太不耐穿,而且死贵,性价比真不行(穷)。
  • PS:三月,参加了三场马拉松,仁寿、万峰林、惠州,一场没跑一个激进的理想主义者失去目标后的虚无人生观,张宏达文案写得真不错,他曾经也是月跑七八百公里的业余顶级精英,全马PB2:32:03,但如今对跑步已经失去热情。世事如此,完成一次目标就足够了,因为总有老去的那天。这个世界没有太多有意义的事情,真理和爱除外,尊重每一种活法,未经他人苦,莫劝他人善。

容器操作

容器创建:就是将镜像加载到容器的过程。

新创建的容器默认处于停止状态,不运行任何程序,需要在其中发起一个进程来启动容器。

格式:docker create [选项] 镜像

常用选项:

  • -i:让容器开启标准输入接受用户输入命令
  • -t:让 Docker 分配一个伪终端 tty
  • -it:合起来实现和容器交互的作用,运行一个交互式会话 shell
docker create -it nginx:latest /bin/bash

查看容器的运行状态

docker ps -a			#-a 选项可以显示所有的容器
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS    PORTS     NAMES
8b0a7be0ff58   nginx:latest   "/docker-entrypoint.…"   57 seconds ago   Created             inspiring_swanson

容器的ID号	   加载的镜像     运行的程序               创建时间       当前的状态  端口映射  名称
...

启动容器

格式:docker start 容器的ID/名称

docker start 8b0a7be0ff58
docker ps -a

创建并启动容器
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令/进程共存亡的终端,命令/进程运行容器运行, 命令/进程结束容器退出。

docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid=1 的进程挂了,那么docker容器便会直接退出,也就是说Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:

  1. 检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
  2. 利用镜像创建并启动一个容器;
  3. 分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
    (4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
    (5)分配一个地址池中的 IP 地址给容器;
    (6)执行用户指定的应用程序,执行完毕后容器被终止运行。
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a					#会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了

在后台持续运行 docker run 创建的容器
需要在 docker run 命令之后添加 -d 选项让 Docker 容器以守护形式在后台运行。并且容器所运行的程序不能结束。

docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"

docker ps -a					#可以看出容器始终处于 UP,运行状态
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS         PORTS     NAMES
2592d3fad0fb   centos:7   "/usr/bin/bash -c 'w…"   2 seconds ago    Up 2 seconds             peaceful_chatelet

docker run -itd --name test1 centos:7 /bin/bash   #创建容器并持续运行容器

20240321(扬/芜10日,澄24日,通31日)

  • 开始调整起床时间,今天先从7:30开始,之后每天提前10分钟起。大腿很酸,本来冬训每周一次腿部力量训练,已经很久没有这种酸麻感,主要昨天12组箭步,晚上又🏸+10K,训练量太大,虽拉伸到位,仍无济于事。
  • 晚饭后遛了圈操场消食,逮到嘉伟黑练,他在跑129课表,精英组(1000米@3’30"+1000米@3’50")×3,锡马在即,这作为赛前最后一次变速训练,强度不算太高。129有人甚至3’10"/3’30"的配速跑完课表,精英跑者,恐怖如斯。
  • 下周末NRC开营仪式,肯定是去不了了,也不让找人代替参加。准备请耿老师帮忙取一下NIKE发的一套装备(不知道会发哪双鞋子)。耿老师2024年跑量已经达到980km,平均配速4’44",3月还没见底,相当于月均至少350km。他去年刚做爸爸,又考取上财MBA,今年5月将代表商学院去参加戈壁赛,还能维持这样的跑量真的有点恐怖。
  • 晚上还是陪AK跑了会儿,一点儿不练还是说不过去。3K+2K+1K倒金字塔(他跑10K,我跟着跑间歇),大腿酸麻难耐,实在难顶。宋某也在恢复训练,大腿拉伤初愈,5K就跑出19’10"。但最后冲刺又把大腿拉伤了,我也真是服了他唉,陪他做些核心和引体。他真的,太挥霍自己的天赋,饮食、睡眠、力量,但凡能做好一项,绝对是能比肩嘉伟的存在。现在就是一副想养老又不甘心的模样,让人有些恨铁不成钢。
  • AK最终10K@3’43",原计划12K@3’40",状态似乎不是那么好。锡马剩余不足3天,我劝AK还是别太激进,放轻松些,安全完赛最重要。想想还是好可惜,不能跟AK、嘉伟一起去参加锡马,真的太遗憾了。或许下半年,还有一次上马的机会吗?我不知道,身体还能否扛到那一天。
    在这里插入图片描述

终止容器运行

格式:docker stop 容器的ID/名称

docker stop 2592d3fad0fb
docker ps -a

容器的进入

需要进入容器进行命令操作时,可以使用 docker exec 命令进入运行着的容器。

格式:docker exec -it 容器ID/名称 /bin/bash

  • -i 选项表示让容器的输入保持打开;
  • -t 选项表示让 Docker 分配一个伪终端。
docker start 2592d3fad0fb					#进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit				#退出容器后,容器仍在运行
docker ps -a
docker run -it centos:7 bash      #不加 -d 选项会创建容器后直接进入容器进行交互,但是退出容器,容器也会停止
#复制到容器中
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/
#从容器复制文件到主机
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt

容器的导出与导入

用户可以将任何一个 Docker 容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export 命令将已经创建好的容器导出为容器快照文件,无论这个容器是处于运行状态还是停止状态均可导出。可将导出文件传输到其他机器,通过相应的导入命令实现容器的迁移。

导出格式:docker export 容器ID/名称 > 文件名

docker export 8c14058479c4 > centos7.tar
docker export -o centos7.tar 8c14058479c4
#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7.tar | docker import - centos7:test			#导入后会生成镜像,但不会创建容器
docker import centos7.tar -- centos7:test

删除容器

格式:docker rm [-f] 容器ID/名称

docker stop 2592d3fad0fb
docker rm 2592d3fad0fb				#删除已经终止状态的容器

docker rm -f 2592d3fad0fb			#强制删除正在运行的容器

docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash			#批量停止容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker stop

docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash				#批量删除所有容器
docker ps -a | awk 'NR>=2{print $1}'| xargs docker rm

docker images | awk 'NR>=2{print "docker rmi "$3}' | bash			#批量删除镜像
docker images | grep none | awk '{print $3}' | xargs docker rmi		#删除none镜像

docker rm $(docker ps -a -q)		#批量清理后台停止的容器

20240322(扬/芜9日,澄23日,通30日)

  • 早上6:50自然醒,直接起床,早起两天,明显精神状态好了许多。如果这周比赛,大概率能跑出理想成绩。
  • 昨晚跟AK拼完命,今天大腿更酸,真的不是很想跑,但接下来三四天下雨,还得补点量,太早减量心里实在不安。
  • 晚七点去操场,计划5分多配速慢摇,随性而止。没有认识的人,腿又酸得厉害,说实话,真的坚持不下去,不到1km便心生退意。忽然来了小伙子想跟着我跑,数院大三的XR,有氧阈目测4’30"上下,不禁让我想起21年9月,我刚认识王兴耀的光景(XR的就和当时我的水平相仿,而如今的我,已经超越王兴耀巅峰期水平)。也好,起了些兴致,带着他从5’00"慢慢加到4’20",最终均配4’37"跑完10km,最后两三圈可以清晰听见他喘粗气的声音,但还是努力地跟了下来。他也是失恋后开始跑步,刚刚练了三个多月,月跑能到250km以上,平时也会跑间歇,真的很不错。
  • 今晚有四五人跟着我跑,包括昨天逼得宋某冲刺到拉伤的ZYY(他400米56秒台,有氧能力差些),但只有XR一人跟完全程。或许,跑步也能算是一种传承么?就像王兴耀是我的启蒙老师,没有他,可能我早已放弃。而最后一年多的时间里,或许,我也能帮助一些人跑得更好吧。
    在这里插入图片描述在这里插入图片描述

Git设置代理:

HuggingFace需ladder后,需要设置Git代理才能克隆,梯子可用时:
在使用git clone命令时,如果需要通过Clash代理进行网络请求,可以设置Git的代理配置来实现。
Clash 默认使用的HTTP代理端口是7890,而HTTPS代理端口是7891

在命令行中设置Git代理的命令如下:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7891

如果只是当次修改代理,则去掉--global选项,或者:

GIT_PROXY_COMMAND=echo git clone https://github.com/example/repo.git

Git中取消全局代理设置:

git config --global --unset http.proxy
git config --global --unset https.proxy

也可以在shell配置文件中(如.bashrc.zshrc)将它们删除。

例如,如果你之前设置了这样的代理:

export http_proxy=http://your-proxy-address:port
export https_proxy=https://your-proxy-address:port

你可以从配置文件中删除这些行,或者使用以下命令直接在命令行中取消:

unset http_proxy
unset https_proxy

取消代理后,Git将不再使用代理服务器进行网络连接。


20240323(扬/芜8日,澄22日,通29日)

  • 本以为今天下一天雨,已经做好打球的准备。结果一滴雨都没见着,不下雨就没有偷懒的理由,下午例训,3.31前最后一次大强度。小腿沙袋负重1kg×2,跑3k+1k+1k,拆掉沙袋再补5k,力竭,腿抬不动一点。我从没试过小腿负重跑,但目前最大的弱点就在右跟腱,哪里弱就得练哪里。
  • 目前三月总跑量197.4km,平均配速4’10"/km,慢跑的比例很低,跑量虽然不算很高,但强度肯定到位了。我已尽之所能,接下来可以安心减量调整,将精神和肌肉恢复到全盛状态。我相信,这次不会再输了。
  • 晚上蜀地源大吃一顿,572g菜(笋+藕+菇+海带结+木耳,一般不拿碳水,因为饭能无限加) + 320g牛肉 + 3碗饭,这是每周六惯例的一次放纵。现在每天吃食堂,早上奶粉+鸡蛋+饼干+苹果,中午两条红烧鱼+一个菜,晚上酸菜鱼+两个菜,吃得很香,但是碳水成瘾,实在饿得要命,晚上11点半回去还得再补一杯奶粉和十几颗巴旦木才能满足。虽然睡前吃坚果不好,但是真的好饿。反正长不胖,使劲造。
  • 明日锡马,注定恶战(要么湿热,要么雨战),很遗憾无法到场,但真心希望AK和嘉伟都能完成目标(AK240,嘉伟245),虽然很难,然无梦想枉少年,尽管不再年轻,男人是永远不会老的走过的路都会留下足迹。各位加油,一定,一定会好运的。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

python实现t-SNE降维算法,使用sklearn.manifold

import numpy as np
import matplotlib.pyplot as plt
from sklearn import manifold, datasets
 
digits = datasets.load_digits(n_class=6)
X, y = digits.data, digits.target
n_samples, n_features = X.shape

n = 20  # 每行20个数字,每列20个数字
img = np.zeros((10 * n, 10 * n))
for i in range(n):
    ix = 10 * i + 1
    for j in range(n):
        iy = 10 * j + 1
        img[ix:ix + 8, iy:iy + 8] = X[i * n + j].reshape((8, 8))
plt.figure(figsize=(8, 8))
plt.imshow(img, cmap=plt.cm.binary)
plt.xticks([])
plt.yticks([])
plt.show()
参数说明
parameters描述
n_components嵌入空间的维度
perpexity混乱度,表示t-SNE优化过程中考虑邻近点的多少,默认为30,建议取值在5到50之间
early_exaggeration表示嵌入空间簇间距的大小,默认为12,该值越大,可视化后的簇间距越大
learning_rate学习率,表示梯度下降的快慢,默认为200,建议取值在10到1000之间
n_iter迭代次数,默认为1000,自定义设置时应保证大于250
min_grad_norm如果梯度小于该值,则停止优化。默认为1e-7
metric表示向量间距离度量的方式,默认是欧氏距离。如果是precomputed,则输入X是计算好的距离矩阵。也可以是自定义的距离度量函数。
init初始化,默认为random。取值为random为随机初始化,取值为pca为利用PCA进行初始化(常用),取值为numpy数组时必须shape=(n_samples, n_components)
verbose是否打印优化信息,取值0或1,默认为0=>不打印信息。打印的信息为:近邻点数量、耗时、σσ、KL散度、误差等
random_state随机数种子,整数或RandomState对象
method两种优化方法:barnets_hut和exact。第一种耗时O(NlogN),第二种耗时O(N^2)但是误差小,同时第二种方法不能用于百万级样本
angle当method=barnets_hut时,该参数有用,用于均衡效率与误差,默认值为0.5,该值越大,效率越高&误差越大,否则反之。当该值在0.2-0.8之间时,无变化。

20240324(扬/芜7日,澄21日,通28日)

  • 直到中午吃完饭,才想起今天是SXY生日。这两天满脑子想的都是锡马,算了算了。
  • 锡马战果,AK小崩,嘉伟大崩(今天其实很多高手都跑崩,但何杰破纪录导致大家都没借口了)。天气不算很好,但也没想象得糟,昨夜一场雷雨褪去热气,至少赛程没下雨。AK248安全完赛,差强人意。嘉伟前28km保持4分以内配速,之后大崩,走走停停,340完赛LZR、安迪、小崔顺利完赛半马
  • 校友方面,86级金融蒋蔚文半马跑出127(这可是快六十岁的大爷了),均配4’07",令人惊叹;03级财管刘守征3:01:40完赛全马,他是之前被认为最有望成为第十位破三的校友。
  • 下午跑10圈渐加速,4’21"均配,闷热得很,不想跑太多,想着还是去打会儿球。这两天王京、亦童都没来实验室,晚饭后去球馆找了个大爷求虐,又被遛得怀疑人生。大爷动作一致性太高,而且吊球手感超级稳(不过比不上那个中分小哥的钓鱼球,我还是能成功反击大爷几球)。大爷说年轻人体力很不错嘛,别人这样拼命救球早就不行了,你还能坚持这么久,练好发球和握拍,优势很大,会体验到打羽毛球的乐趣。
  • 行,上半年AK和嘉伟就先歇一歇,让我先秀一把,下半年舞台再让给你俩表演。等我这段时间比赛结束,好好找些高手练球,一群人不就是比我多打几年球呗,洗干净脖子等着,早晚打爆你们。

锡马3423人破三,远超去年北马2400人规模。无锡赛道真的很美,烟雨朦胧(体感应该还不错,天气没有想象地坏),航拍画面真的别有韵致(作为扬州人,我要说扬州的赛道更美)。何杰再次打破全国纪录,中国马拉松进入206时代。何杰是真的可怕,最后六七公里,几乎每公里都在补给、喝水、淋水浇头,从35km他就在咬牙,面部代偿特别厉害,杨绍辉很谨慎地跟着老黑后面破风,看起来游刃有余,但何杰依然一个劲地想把他俩都甩开。以为何杰会先掉队,结果是杨绍辉到39km先掉下去,何杰硬是顶到最后跟着两个老黑一起冲线,只比第三名慢了不到一秒,意志力惊人。

手写t-SNE降维算法

import numpy as np
def cal_pairwise_dist(x):
    '''计算pairwise 距离, x是matrix
    (a-b)^2 = a^w + b^2 - 2*a*b'''
    sum_x = np.sum(np.square(x), 1)
    dist = np.add(np.add(-2 * np.dot(x, x.T), sum_x).T, sum_x)
    return dist

def cal_perplexity(dist, idx=0, beta=1.0):
    '''计算perplexity, D是距离向量,
    idx指dist中自己与自己距离的位置,beta是高斯分布参数
    这里的perp仅计算了熵,方便计算'''
    prob = np.exp(-dist * beta)
    prob[idx] = 0 # 设置自身prob为0
    sum_prob = np.sum(prob)
    perp = np.log(sum_prob) + beta * np.sum(dist * prob) / sum_prob
    prob /= sum_prob
    return perp, prob
def seach_prob(x, tol=1e-5, perplexity=30.0):
    '''二分搜索寻找beta,并计算pairwise的prob'''
    # 初始化参数
    print("Computing pairwise distances...")
    (n, d) = x.shape
    dist = cal_pairwise_dist(x)
    pair_prob = np.zeros((n, n))
    beta = np.ones((n, 1))
    # 取log,方便后续计算
    base_perp = np.log(perplexity)
 
    for i in range(n):
        if i % 500 == 0:
            print("Computing pair_prob for point %s of %s ..." %(i,n))
        betamin = -np.inf
        betamax = np.inf
        perp, this_prob = cal_perplexity(dist[i], i, beta[i])
        # 二分搜索,寻找最佳sigma下的prob
        perp_diff = perp - base_perp
        tries = 0
        while np.abs(perp_diff) > tol and tries < 50:
            if perp_diff > 0:
                betamin = beta[i].copy()
                if betamax == np.inf or betamax == -np.inf:
                    beta[i] = beta[i] * 2
                else:
                    beta[i] = (beta[i] + betamax) / 2
            else:
                betamax = beta[i].copy()
                if betamin == np.inf or betamin == -np.inf:
                    beta[i] = beta[i] / 2
                else:
                    beta[i] = (beta[i] + betamin) / 2
            # 更新perb,prob值
            perp, this_prob = cal_perplexity(dist[i], i, beta[i])
            perp_diff = perp - base_perp
            tries = tries + 1
        pair_prob[i,] = this_prob # 记录prob值
    print("Mean value of sigma: ", np.mean(np.sqrt(1 / beta)))
    return pair_prob

def pca(x, no_dims = 50):
    ''' PCA算法: 预降维'''
    print("Preprocessing the data using PCA...")
    (n, d) = x.shape
    x = x - np.tile(np.mean(x, 0), (n, 1))
    l, M = np.linalg.eig(np.dot(x.T, x))
    y = np.dot(x, M[:,0:no_dims])
    return y
 
def tsne(x, no_dims=2, initial_dims=50, perplexity=30.0, max_iter=1000):
    """Runs t-SNE on the dataset in the NxD array x
    to reduce its dimensionality to no_dims dimensions.
    The syntaxis of the function is Y = tsne.tsne(x, no_dims, perplexity),
    where x is an NxD NumPy array.
    """
    # Check inputs
    if isinstance(no_dims, float):
        print("Error: array x should have type float.")
        return -1
    if round(no_dims) != no_dims:
        print("Error: number of dimensions should be an integer.")
        return -1
    # 初始化参数和变量
    x = pca(x, initial_dims).real
    (n, d) = x.shape
    initial_momentum = 0.5
    final_momentum = 0.8
    eta = 500
    min_gain = 0.01
    y = np.random.randn(n, no_dims)
    dy = np.zeros((n, no_dims))
    iy = np.zeros((n, no_dims))
    gains = np.ones((n, no_dims))
    # 对称化
    P = seach_prob(x, 1e-5, perplexity)
    P = P + np.transpose(P)
    P = P / np.sum(P)
    # early exaggeration
    P = P * 4
    P = np.maximum(P, 1e-12)
    # Run iterations
    for iter in range(max_iter):
        # Compute pairwise affinities
        sum_y = np.sum(np.square(y), 1)
        num = 1 / (1 + np.add(np.add(-2 * np.dot(y, y.T), sum_y).T, sum_y))
        num[range(n), range(n)] = 0
        Q = num / np.sum(num)
        Q = np.maximum(Q, 1e-12)
        # Compute gradient
        PQ = P - Q
        for i in range(n):
            dy[i,:] = np.sum(np.tile(PQ[:,i] * num[:,i], (no_dims, 1)).T * (y[i,:] - y), 0)
 
        # Perform the update
        if iter < 20:
            momentum = initial_momentum
        else:
            momentum = final_momentum
        gains = (gains + 0.2) * ((dy > 0) != (iy > 0)) + (gains * 0.8) * ((dy > 0) == (iy > 0))
        gains[gains < min_gain] = min_gain
        iy = momentum * iy - eta * (gains * dy)
        y = y + iy
        y = y - np.tile(np.mean(y, 0), (n, 1))
        # Compute current value of cost function
        if (iter + 1) % 100 == 0:
            if iter > 100:
                C = np.sum(P * np.log(P / Q))
            else:
                C = np.sum( P/4 * np.log( P/4 / Q))
            print("Iteration ", (iter + 1), ": error is ", C)
        # Stop lying about P-values
        if iter == 100:
            P = P / 4
    print("finished training!")
    return y
if __name__ == "__main__":
    # Run Y = tsne.tsne(X, no_dims, perplexity) to perform t-SNE on your dataset.
    X = np.loadtxt("mnist2500_X.txt")
    labels = np.loadtxt("mnist2500_labels.txt")
    Y = tsne(X, 2, 50, 20.0)
    from matplotlib import pyplot as plt
    plt.scatter(Y[:,0], Y[:,1], 20, labels)
    plt.show()

20240325(扬/芜6日,澄20日,通27日)

  • 跑休,状态已完全恢复,本想晚上4分配跑个半马,打一针强心剂,但是下午妖风雷雨,遂晚上继续针对小腿跟腱训练(嘉伟前车之鉴,我也怕首马会败在跟腱拉伤),3000×单摇+200×双摇+200对×台阶交替步+左右各200次提踵,补AK的核心训练[(5个低平板动作+5个高平板动作)×30次)]×3组
  • 其实对嘉伟来说,失败一次也挺好。自本科入学以来,两场校运会,两次市运会,三次高百,三次半马,一次全马,以及平时若干的训练自测,嘉伟都跑出了极好的成绩。在我的印象里,嘉伟根本就没有输过,即便是市运会不敌高水平运动员,嘉伟每次也能跑出PB。全马就是这样一件事,任何人在跑前都不敢说自己一定能轻松完赛。昨天锡马就连吴向东都跑崩了,2:41:20,他在三月初的大阪马拉松跑出2:08:04的成绩,一跃成为中国马拉松历史第三人,达标巴黎奥运会,如此顶尖的运动员都崩成这样,30km后被第一集团拉爆,开始走走停停,尽管如此,他也没有弃赛,其实对他来说再跑下去意义也不大了,但不管出于什么样的原因,他还是跑完了全程。对全马,是要有敬畏之心的。
  • PS:昨天打完球左膝疼得特别厉害(今天差不多恢复),以前打完球从来没这么疼过,走路都瘸得很。抹了些云南白药和黄道益,再热敷,勉强恢复。膝盖已经很久没有疼过,赛前真不敢再去打了,羽球有害健康,教训就在背后,青汶最近已经摆脱架拐,尽管脚上石膏还在,估计再过几天就能生龙活虎了。

TSNE demo:参考链接

import numpy as np
import sklearn
from sklearn.manifold import TSNE
from sklearn.datasets import load_digits
# Random state.
RS = 20150101
import matplotlib.pyplot as plt
import matplotlib.patheffects as PathEffects
import matplotlib
# We import seaborn to make nice plots.
import seaborn as sns
sns.set_style('darkgrid')
sns.set_palette('muted')
sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
digits = load_digits()
# We first reorder the data points according to the handwritten numbers.
X = np.vstack([digits.data[digits.target==i] for i in range(10)])
y = np.hstack([digits.target[digits.target==i] for i in range(10)])
digits_proj = TSNE(random_state=RS).fit_transform(X)
def scatter(x, colors):
    # We choose a color palette with seaborn.
    palette = np.array(sns.color_palette("hls", 10))
    # We create a scatter plot.
    f = plt.figure(figsize=(8, 8))
    ax = plt.subplot(aspect='equal')
    sc = ax.scatter(x[:,0], x[:,1], lw=0, s=40, c=palette[colors.astype(np.int)])
    plt.xlim(-25, 25)
    plt.ylim(-25, 25)
    ax.axis('off')
    ax.axis('tight')
    # We add the labels for each digit.
    txts = []
    for i in range(10):
        # Position of each label.
        xtext, ytext = np.median(x[colors == i, :], axis=0)
        txt = ax.text(xtext, ytext, str(i), fontsize=24)
        txt.set_path_effects([
            PathEffects.Stroke(linewidth=5, foreground="w"),
            PathEffects.Normal()])
        txts.append(txt)
    return f, ax, sc, txts
scatter(digits_proj, y)
plt.savefig('digits_tsne-generated.png', dpi=120)
plt.show()

20240326(扬/芜5日,澄19日,通26日)

  • 计划15-20K,用半马预定配速(3’55"-4’00"/km)进行节奏跑拉练。不太顺利,大约6000米处就有些吃力,但是8000米后体力又充沛起来(可能是场上有人在测1000米的缘故,独自拉练缺少动力)。25圈后感觉可以顶住,稍微提了点速,立刻就有力竭感,遂26圈提前结束,41分整,均配3’55"。也罢,赛前不宜上太大强度,大致熟悉一下节奏,足够了。
  • 队里下午练了很难的项目,跨步跳操场一大圈,我记得以前周四晚是在沙坑跑道上跳,不足100米的距离都累得要死,跨步跳一整圈400多米太恐怖了(后来我自己也试了一下,坚持不下来,但是两个LXY,还有XZY都顶下来了,确实很强)。东哥说是AK那一批人就是这样练过来的,orz。
  • 本周末同样五人参赛(上周末锡马四人组,AK,嘉伟,安迪,LZR;小崔在奉化半马),AK老大哥继续越野,LXY芜湖10K,WBJ金华全马(首马),ZJC金华半马(首半马)。万事顺遂,请珍惜依然热爱的时光。
    在这里插入图片描述在这里插入图片描述

latex字体颜色:

% 导言区添加 {color}{xcolor} 中任意一个即可,也可以都导入
\usepackage{color}
\usepackage{xcolor}

% 直接写颜色
{\color{red}红色}
{\color{green}绿色}
{\color{blue}蓝色}

% 写颜色的RGB值(0~1{\color[rgb]{1,0,0}红色}
{\color[rgb]{0,1,0}绿色}
{\color[rgb]{0,0,1}蓝色}

% 写颜色的RGB值(0~255{\color[RGB]{255,0,0}红色}
{\color[RGB]{0,255,0}绿色}
{\color[RGB]{0,0,255}蓝色}

% textcolor方法(同上所有)
\textcolor{red}{红色}
{\textcolor[rgb]{1,0,0}红色}
{\textcolor[RGB]{255,0,0}红色}

itemize设置缩进

\usepackage{enumitem}
\begin{document}
\begin{itemize}[leftmargin=*] % 仅对当前itemize环境生效
  \item 第一项
  \item 第二项
  \item 第三项
\end{itemize}
\end{document}

20240327(扬/芜4日,澄18日,通25日)

  • 锡马那日,WXY带着女友在参加汉马的半程项目,1小时32分。他的PB是2021年4月在南京仙林跑出的1小时24分(首半马,出道即巅峰),也是带着女友参加。那时是他实力最强盛的时期,万米有破开38分的实力。可惜从我遇见他开始,到他本科毕业,因为种种不顺正处于低谷期,2021年高百连40分钟都没跑进。幸运的是,如今已是很幸福的模样了。
  • 正是因为有这样的起伏,生命才显得不那么无趣。我很喜欢穹窿山上,军师说的话,一马平川的路,跑久了容易迷失自己,山野的上下起伏才能真切感受到自己的存在。不同的人,理应有不一样精彩的人生。
  • 晚饭后小跑4000米渐加速(4’15"起步,最后1000米冲到3’30"),开完会又陪AK和嘉伟慢跑5000米嘉伟在我俩来之前已经跑了5000米,18’06",恐怖如斯,恢复得太快了),完事AK带我俩做了几组脚踝力量,主要是针对嘉伟这次跟腱受伤的问题,嘉伟决定要开始练力量,因为以前他从没在比赛中受过伤,一直不重视力量,一次失败对他来说是很好的教训。
  • PS:这个冬训每周一次负重箭步+核心训练,以前我每天睡前都会做些核心动作,如平板支撑、两头起,坚持两年效果一般。后来补了些动态动作,成组训练,一周一次,终见成效。平时下雨或跑休日,就做小腿脚踝训练,跳绳、提踵、台阶跳步,今天AK又教了其他动作,工欲善其事,必先利其器
  • PS:似乎很久没有三个人一起训练了,上一次可能是去年夏训。此时,彼时,几何?聚少离多,珍惜当下。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

上周马斯克开源了grok-1之后(虽然huggingface上只有一个ckpt,使用文档还没上线),这周又来了个open-sora(https://github.com/hpcaitech/Open-Sora),有点蹭热度的嫌疑,其实只是一个Sora的一个超简约版,没啥大用,但提供了模型测试的工具和指令。

python实现抽象类:

from abc import ABC, abstractmethod
 
class AbstractClass(ABC):
    @abstractmethod
    def my_abstract_method(self, arg):
        pass
 
# 以下是一个实现该抽象方法的子类示例
class ConcreteClass(AbstractClass):
    def my_abstract_method(self, arg):
        print(f"Concrete implementation with argument: {arg}")
 
# 使用抽象方法的示例
c = ConcreteClass()
c.my_abstract_method("Hello World!")

抽象类中的抽象方法必须实现,否则无法实例化对象,虽然这对python来说也挺多余的。

可以在文件中使用带有formatter的字符串进行读取,如可以将prompt模板存储在外部文件:

I will provide a question and a piece of context involving several articles for you, please give me your answer and reasoning path (or CoT, i.e. chain of thought) to the question as brief as possible. Your response should be like:
​```
Answer: <your answer to the question>
CoT: <how you draw the answer above>
​```
{splitlines}
Question: {question}
Context:
{context_string}

然后直接读取:

string.format(splitlines = splitlines, question = question, context_string)

20240328(扬/芜3日,澄17日,通24日)

  • 3月31日,广陵区,晴,15-25℃;湾沚区,多云,14-28℃,预计会很晒很热。其实有做两手准备,直到最后一刻我还是抱有去芜湖的幻想,虽然早就该知道是多余的了。
  • 最后一个训练日(明后慢跑调整,补碳水,最近真饿得不行),状态依然很好,晚上起手3’46"配速的4600米(没看表少跑一圈,这一段XR跟了我2000米),然后带XR跑10圈变速(400米@4’00"+400米@4’40"),他的基础很好,只是刚开始跑步三个月,远远超过我当年同期水平。假以时日,上限是很高的。(原来1月29日晚上,我跑出上一个万米PB,38’08",跟在我后面满嘴C语言的人就是XR,小伙子还得练
  • 准备穿田径队的背心和短裤参赛,虽然这么多年学校的表现,让人不是很能绷得住,但毕竟也在这里呆了这么多年,就算再嫌弃,也是有些感情的。说起来也可笑,快八年,我都没穿过印着学校名称的衣服出去参加比赛,不是没有机会,而是根本没见过这种衣服(也是晚上回来才想起来还有这件背心)。几次国赛市赛,别的学校都是统一服装,来自哪里一目了然,我们一群人五花八门,毫无章法,连身统一的校服都没有,属实难绷。
  • 较于嘉伟这个常胜将军,我的战绩一向惨不忍睹。去年扬马,2:12:29,尽管痛苦地走完了最后7km,又怎会甘心在主场跑出这样的成绩,因此从来没有让别人看过这张成绩证书。但是这次,我一定会赢,而且将是大获全胜。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

https://huggingface.co/vish88/roberta-base-finetuned-hotpot_qa

from transformers import AutoTokenizer, RobertaForQuestionAnswering
import torch
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = RobertaForQuestionAnswering.from_pretrained(model_path)
question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
inputs = tokenizer(question, text, return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)
answer_start_index = outputs.start_logits.argmax()
answer_end_index = outputs.end_logits.argmax()
predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
tokenizer.decode(predict_answer_tokens, skip_special_tokens=True)
# target is "nice puppet"
target_start_index = torch.tensor([14])
target_end_index = torch.tensor([15])
outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
loss = outputs.loss
round(loss.item(), 2)

https://huggingface.co/vish88/xlnet-base-cased-finetuned-hotpot_qa

from transformers import AutoTokenizer, XLNetForQuestionAnsweringSimple
import torch
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = XLNetForQuestionAnsweringSimple.from_pretrained(model_path)
question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
inputs = tokenizer(question, text, return_tensors="pt")
with torch.no_grad():
    outputs = model(**inputs)
answer_start_index = outputs.start_logits.argmax()
answer_end_index = outputs.end_logits.argmax()
predict_answer_tokens = inputs.input_ids[0, answer_start_index : answer_end_index + 1]
# target is "nice puppet"
target_start_index = torch.tensor([14])
target_end_index = torch.tensor([15])
outputs = model(**inputs, start_positions=target_start_index, end_positions=target_end_index)
loss = outputs.loss

对象的x.__dict__(不同于dict(x))返回值是一个字典,Key是__dir__(等同于dir(x))是内容,值即为Key对应的成员变量或函数。同理x.__str__()等价于str(x)


20240329(扬/芜2日,澄16日,通23日)

  • 买不到明天的票,遂提前一天回来。今年志愿者明显比去年热情多了,大概是被无锡卷怕,再不提升一下参赛体验,这块双金的牌子怕要不保。薅来一堆女大在市民中心门口被迫营业,要不是本地人,我就真被感动了,这大太阳晒得,实话说看着心疼又无奈,不礼貌性地回应一下就太不人道了。
  • 但是领完物刚坐上公交,就被一辆货车逆行堵住路,好久才疏通,车上全是外地参赛选手,刚建立起来的形象一下子全崩塌了。扬州这几年城建、高架修一堆,结果公共交通还是一团糟,路边停的全是车,本就不宽裕的道路雪上加霜。去年也是,接驳车堵成麻瓜,今年估计还一个样。
  • 晚饭后散步,一日舟车劳顿,腿脚很乏累,连慢跑都做不到。路过废弃的小学,那些小时候常走的巷陌,现在不低头、打着手电,就不太敢深入潜行。经过梵行寺时,即兴想进去拜一拜,其实我从来不信这些噱头,倒是凯爹很痴迷这种事,每次出去还会买绳结、护身符之类的小玩意儿。
  • 但是,人活越久,就越觉得,谋事在人,成事在天。不知道是因为今天路走多,还是昨天5000米冲太猛,右足弓连带着跟腱都有些疼痛,很怕会重蹈覆辙。这可能是我26年生命中,最想赢的一次,甚至比中考、高考、推免、各种比赛时都更想赢,那些实话说都是运气,只有这回,是真正有付出努力。
  • 当寺钟敲响时,莫名的安心感,似乎无需害怕些什么,要战胜的或许只是自己的心魔。故乡海棠花开,正值绽放之时。
    在这里插入图片描述在这里插入图片描述

Whisper:

>>> from datasets import load_dataset
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration

>>> # Select an audio file and read it:
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> audio_sample = ds[0]["audio"]
>>> waveform = audio_sample["array"]
>>> sampling_rate = audio_sample["sampling_rate"]

>>> # Load the Whisper model in Hugging Face format:
>>> processor = WhisperProcessor.from_pretrained("openai/whisper-tiny.en")
>>> model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-tiny.en")

>>> # Use the model and processor to transcribe the audio:
>>> input_features = processor(
...     waveform, sampling_rate=sampling_rate, return_tensors="pt"
... ).input_features

>>> # Generate token ids
>>> predicted_ids = model.generate(input_features)

>>> # Decode token ids to text
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)

>>> transcription[0]
' Mr. Quilter is the apostle of the middle classes, and we are glad to welcome his gospel.'

20240330(扬/芜1日,澄15日,通22日)

  • 早上不到五点自然醒,但是要等检验科上班去空腹测血糖,妈妈觉得我之前暴饮暴食,现在每周六又这样放纵地吃,血糖会出问题,但是查下来反而是甘油三酯偏低(0.44mmol/L,正常值0.56~1.71,可能是晨跑完饿了太久),其他指标都很正常。
  • 三月总跑量231.4km,清晨空腹称重65.3kg,比春节期间轻将近2kg,确实太瘦了,首马结束后一定慢慢养回来。减重对我来说并不是目的,只是一个很无奈的结果,如果可以,我也能想保持住70kg左右的体重。
  • 六点晨跑,适应比赛服装和时间。从5分配以外慢慢加到4分配以内,均配4’36"跑了5.36km,平均心率148bpm,体感还行,空腹稍许吃力,但问题不大。跑完手表给我的最大摄氧量评估从61涨到了62,很欣慰。
  • 早饭回来,薅老爹去把路线走一遍,时值此季,游人很多,放松身心,最后调整。下午补觉,体重涨到67.6kg,能量储备已经足够。
  • 无需多言。AK,LXY,WBJ,ZJC,还有我,4分配以内,顶完半马,加油。
    PS:今年参赛服挺好看,绿白渐变色款,去年纯蓝色,属实不行。

Whisper在Fleurs上进行音频信号分类:

>>> import torch
>>> from transformers import AutoFeatureExtractor, WhisperForAudioClassification
>>> from datasets import load_dataset
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("sanchit-gandhi/whisper-medium-fleurs-lang-id")
>>> model = WhisperForAudioClassification.from_pretrained("sanchit-gandhi/whisper-medium-fleurs-lang-id")
>>> ds = load_dataset("google/fleurs", "all", split="validation", streaming=True)
>>> sample = next(iter(ds))
>>> inputs = feature_extractor(
...     sample["audio"]["array"], sampling_rate=sample["audio"]["sampling_rate"], return_tensors="pt"
... )
>>> input_features = inputs.input_features

>>> with torch.no_grad():
...     logits = model(input_features).logits
>>> predicted_class_ids = torch.argmax(logits).item()
>>> predicted_label = model.config.id2label[predicted_class_ids]
>>> predicted_label
'Afrikaans'

20240331(扬州马拉松,破三之旅上篇完结)

赛前曾有无数疑虑,担心状态、天气、节奏、伤痛。赛前一天特意去剃了个寸头,我不需要拍好看的照片,以及任何参赛体验。这一次,只为成绩而来。

在这里插入图片描述

幸运地是,一切尽如计划,1:24:05的大幅PB,回应了四个月以来的坚持,也坚定了首马破三的信心。我成功击败嘉伟在2023年上海半马跑出的1:24:29的PB,以及王兴耀2021年南京仙林半马跑出的1:24:35的PB,虽然距离老大哥AK还差不少,但也是至少排进上财历史前五的半马成绩。

很难有人能理解我冬训期的疯狂,零下三度的寒夜,短袖短裤,寒风中间歇变速、力量训练,每个曾陪我冬训过的人,都曾倒下过,感冒、发烧,只有我独自坚持到最后。前天领物,看到市民中心盛开的海棠,我想,再平凡的生命,也理应会有一次绽放的机会,与其行尸走肉,不如活得精彩。

I deserve it, and deserve better.

在这里插入图片描述在这里插入图片描述在这里插入图片描述


赛前准备

昨晚,九点熄灯,很快就睡着了,结果不到十二点就醒来,再也无法合眼。凌晨一点看到LZR和DGL给我加油的私信,我很高兴,虽然依然没能收到想要的消息,没有付出,因此并未期望会有什么回应。DGL告诉我LXY睡得也很早,但10km对她来说本身也不是太大的挑战。

后半夜仅睡着一个小时,我却毫无顾虑。最后一周逐级递减训练量,调整饮食结构,充分休息,让我在赛前已经恢复到全盛状态。当换上田径队的背心短裤,带上墨镜,热身时感受身体极致的轻盈感时,我就知道,总有一天,就在今天。


突围!0-5km(计时点20分10秒,分段20分10秒,排名277)

在这里插入图片描述

在这里插入图片描述
扬马20000人规模,我被夹在B区中间,近两分钟才抵达起点,前方大约有5000人。想赢,就必须快速突围。

从佳明的实时配速图可以看出,这一段速度波动极大,因为时刻都在见缝插针,穿梭前行,最高配速达到316。除了第一个1km被挤得慢些,后面4km在变速穿插的情况下,都保持住350上下的配速。也是在这一段,心率快速上升到180bpm以上。

根据过往经验,我绝无可能以这种心率跑完半马,哪怕10km的也是极其困难,当时还是很有顾虑,但急切的求胜心让我无心减速以调整节奏,在下一个5km,我跑出了可怕的18分49秒分段,几乎平了我目前的场地5000米PB。


疯狂:5-10km(计时点38分59秒,分段18分49秒,排名194)

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

这可能是这辈子最癫狂的二十分钟,在整场比赛的前10km,没有任何一个人可以从背后超越我,而我见到人,无论他有多快,无论直道或转弯,我都想提速把他彻底拉爆,这种自杀式的跑法,已经超出我的能力上限,完全不留余力,把后程的一切都留给意志。一方面,是背后印着的学校名字给我的自信,外头都说上财是长跑弱校,那各位就睁开眼睛看看,弱校的水平到底如何;另一方面,这段是我高中上学的必经之路,尤其到文昌阁,看到扬州中学就在眼前,那个曾给予我三年璀璨、自由、辉煌的地方,孕育五十名院士和第三代领导者的地方,尽管未能在此善始善终,结局不尽人意,但那也只是我的运气不好,我并未怨恨过谁。这条路是我自己选的,就是跪着也一定会爬完。

8km处,我追上兔子方阵,由于没有佩戴眼镜,我看不清旗子上的数字,我向身边的人询问,方知这是A区的130兔子,我很沮丧,跑到8km才追上A区的130兔子,这足够了吗?这还远远不够!还需要更快!立刻提速甩掉方阵,而前方人渐稀疏,等待我的,都是不屑于跟跑130兔子的业余强手了。


对抗:10~15km(计时点58分59秒,分段20分整,排名232)

在这里插入图片描述

在这里插入图片描述

在上一个疯狂的分段里,我的心率一度达到197bpm,这超过了我能承受的最大心率(220-年龄),不可能再维持势头。好在经过前10km的奋战,已经进入宽松舒适的赛道区间,身边人已渐少,可以寻找水平相近的人跟跑,稳定节奏,顶完后半程。

此时一位大哥跑上前来,表示可以350配速带我顺完后程,我说自己的目标是125,目前前半段已经超预期完成任务,后程只需4分配就足够了,350我很难坚持下来。但是大哥很热情,连续两个补给点帮我取水取海绵,其实我并不需要这些东西(半马我是不会进补给点的),但是盛情难却,我只得表达了感谢之情。这时候他抛出一句,我是我们那边跑得最慢的,就随便来跑跑,我无法确信他是否是因为看到背后的学校名称而想要遛我一段,但他这个B装得实在是不咋地,这我能忍?那好,咱们就来比划两下。

当然梦想很美好,现实很骨感,我确实已经强弩之末,无法再扛住这个配速,到13km时,我已经被大哥拉开了很长的距离,配速逐渐掉出4分配,我有些懊恼意气用事,但木已成舟,到15km结束,已有撞墙感,形势不容乐观。而更可怕的是,此时开始上桥,进入平山堂东路的上坡段。


坚持:15~20km(计时点79分41秒,分段20分42秒,排名388)

在这里插入图片描述
在这里插入图片描述

我对平山堂东路是有些阴影的,去年就是在这里崴伤,15km计时点刚好就是上坡起点,我知道已经不可能再维持4分配以内的速度了,于是每千米结束都在计算想跑进125,配速最多还能掉到多少。

但其实这种计算是没有意义的,与其给自己找退路,不如戴上痛苦面具顶完最后一程。在这一段上,我看到前面至少有十个停下走路的人,能跑在我前面的,都是至少127以内的选手,包括18km处一位跑崩的黑人选手,大家非常兴奋,能拉爆老黑的机会可不多,一个个都争先恐后地往前冲,我路过老黑的时候,想了好久加油用英文怎么说,发现实在是想不起来,只好说了一句come on就跑开了,讲道理黑人不至于跑个半马还能崩掉,这个有可能是来给队友做私兔的选手。

到19km,追上了一位黑衣大叔,与他纠缠了好长时间,一直到终点,此时已经确信百分百能跑进125了,心态已经比较轻松,因为最后2km怎么也是能扛得下来的,但总还是想能更快一些吧,虽然到最后也没能做得到,这个分段跑得确实很不理想,否则大概率能破开124。


曙光:20km~终点(总计时84分05秒,净成绩性别排名246,全排名259)

在这里插入图片描述
在这里插入图片描述

最后1km,黑衣大叔说,小伙子,你要是想冲就冲起来吧,我留着些力气,下次再P(B)。我释然地笑了,看到拱门前500米,300米,100米的柱子,去年,我走完了最后7km,直到最后,右脚都疼痛得无法冲线,只能一瘸一拐地走过终点,伤心至极。今年,全盛归来,我又怎会错过这次冲线表现的机会,最后一段强行将配速拉到350以内,那500米的冲刺,前后左右空无一人,真正地释放自我。当我冲进了拱门时,我大喊一声nice,激动之情溢于言表,时间点定格在1:24:05,对我来说已是超级成绩,无需多言。

停下的那刻,说实话,感觉身边的一切都是那样虚幻和不真实,很难想象自己真的坚持到了最后,而且超出预期很多,如果节奏更好些,我很有可能破开124,我知道这个成绩超过了嘉伟、兴耀的PB,那曾经无法企及的,如今已并非虚幻。这个成绩,大概率可以排进市民组前十


后记

今天金华暴雨,参赛的WBJ和ZJC都受了大苦,尤其是WBJ,首马遇到这样的天气,实在是很扫兴的事情,但是他竟然最终357顶完了全程,以手机屏幕、摄像头进水的代价完赛,意志力惊人。ZJC则是142完赛首半马,也已经很优秀了。

AK昨天在赛车场参加一场接力赛,直到晚上七八点才抵达宁海越野赛的旅馆,今早六点即出发,36km组,2000米爬升,也是大暴雨,最终4小时20分完赛,屁降三回,听说这雨下得还挺爽,估计回来就要感冒了。

我并不知道LXY最终10K的成绩,但是她这个月的训练量并不低,达到了211km,讲道理绝对超过她平时正常的跑量,至少她也是有重视这场比赛的,但可能也是受芜湖降雨的影响。开心就好,毕竟每个人对事物的观点是不同的。

DGL似乎也受鼓舞,晚上在操场跑了一个半马,1小时54分,对于大二的女生来说,这已是天花板的水平。

我真的很高兴,已经很久很久没有这么高兴过了,这个成绩足以直通国内绝大多数比赛。下周,NRC将开展为期两个月的培训,期间包括视听展示和体测训练,培训结束将会有闭卷考核,通过者即可成为正式的NRC PACER,我想有一天一定会以PACER的身份站上赛道,领着那些和从前的我一样的初学者,蹒跚学步,迈向终点。

下一站,首马破三。生命正是如此,绽放一回,足矣。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值