Posts with tag notes

摸鱼日志 from 24.7.30

2025-06-30
julyfunlognotes

6.28[astro] ...slug:To generate recursive paths for posts, see: https://docs.astro.build/en/guides/routing/[ok] for me.6.27Xcode keep folder structure in Bundle Resources[ok] ref: https://stackoverflow.com/questions/79036956/how-to-build-structured-resources-folder-in-bundle-with-xcode-16Go to Copy Bundle Resources PhaseClick the + ButtonClick Add OtherSelect the top directory of the structure you want to addIn the "Choose options for adding these files" dialog, tick Create folder referencesClick Finish6.24[vscode, 居中] Maintain screen position always centered on cursorset "cursorSurroundingLines" to 500.[ ][zig, string]https://gencmurat.com/en/posts/zig-strings/6.17[zig, 第三方库 registry] https://zigistry.dev/[ios, swiftui]@State 等属性包装器变量在 init() 中不可用。那问题来了。我有一些数据处理模块,其与 UI 解耦,根据一定的配置执行初始化。用户可以通过 View 修改配置,配置文件会持久化存储在硬盘中。那如果这个配置的管理器是 @ObservedObject 等属性之一,就不能在 UI 的 init() 中调用配置管理器,可能无法满足需求.满足 UI 和非 UI 均可访问配置的简洁、现代实践是?不使用单例.6.11[.DS_Store, not tested] defaults write com.apple.desktopservices DSDontWriteNetworkStores true6.6[vscode, swift lsp, xcode project] Settings up VSCode LSP for xcode project.Install Extension Swift and SweetpadFollow the 3 steps in : https://sweetpad.hyzyla.dev/docs/autocomplete/brew install xcode-build-server --headCommand: SweetPad: Generate Build Server Configbuild the project in the Sweetpad extension panel.[ok] Then the lsp works for me.6.5[xcodebuild]xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instanceI have installed xcode[ok] with sudo xcode-select -s /Applications/Xcode.app/Contents/Developer6.3[not tested, macos keyboards] macos 长按字母无法连续输入.https://zihengcat.github.io/2018/08/02/simple-ways-to-set-macos-consecutive-input/6.1[tested good] Isaac Sim GUI: http://zhaoxuhui.top/blog/2022/12/08/omniverse-and-isaac-sim-note4-omnigraph-and-control-robot-with-keyboard.html#1omnigraph%E7%AE%80%E4%BB%8BIsaac Sim Python API: https://blog.csdn.net/m0_56661101/article/details/1399366715.27[ros, ros2, 包管理, macos] robostack 可以在 mac 上轻松管理 ros. 基于 pixi.5.20[zerotier, 内网穿透] 使用 moon 搭建.说明:planet 是全球网路管理,moon 仅负责中继。通常来说只改 moon 的方案用的是官方 planet.详细的 moon 方案博客: https://blog.03k.org/post/zerotier-moon-ui.html简洁 moon 方案博客: https://www.cnblogs.com/cx850116/p/17805450.htmlAI to understand github repo: https://deepwiki.com/5.18[输入法, input-method, ubuntu-22.04] 今天终于安装好了 ubuntu22.04 sogou pinyin!sudo apt-get install fcitx sudo apt purge ibus sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2 libgsettings-qt1 sudo apt install -y libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2 sudo apt install -y libgsettings-qt1如果其他步骤做完后无效,可尝试取消注释下面文件中的 WaylandEnable=false (ref: https://www.cnblogs.com/amsilence/p/18344774). 这次我取消注释了没重启,应该等于没注释,装好搜狗我又立刻注释上了.cat /etc/gdm3/custom.conf | grep WaylandEnable注意:不要使用 apt. 使用 apt 安装后在键盘设置-Configure 中找不到 sogoupinyin,但是 dpkg 安装可以.sudo apt remove sogoupinyin # 因为我之前 apt 装的. sudo dpkg -i sogoupinyin_4.2.1.145_amd64.debOK 成功显示搜狗拼音. Firefox ok!Edge 还是不行. 但其他软件的体验都不错。5.15ARKit 流程: https://juejin.cn/post/7177321621932212279VLA 大整理(网络结构): https://zhuanlan.zhihu.com/p/73718388105.14[pip, uv] no module named pipref: https://github.com/astral-sh/uv/issues/1551[ok] uv pip install pip5.11[install fonts for ubuntu, and for typst, ubuntu22.04]下载 ttf / otf. 都行今天用了这些,把所有 ttf 都下载了 https://github.com/misuchiru03/font-times-new-roman/blob/master/Times%20New%20Roman.ttf以及 https://github.com/wang-tf/Chinese_OCR_synthetic_data/blob/master/fonts/Songti%20SC%20Regular.ttfsudo cp Times\ New\ Roman*.ttf /usr/share/fonts/truetype/sudo fc-cache -f -vfc-list | nvim 查看一下[ok] 重启 VSCode 在 VSCode Tinymist Preview 中自动显示了相关字体.5.10iPhone 连接 5Ghz wifi 过程中,路由器更改了 WPA 协议,iPhone 自动断开连接后,无法重连此网络.[ok] reset 路由器. (路由器所有设置从头再来)5.9[net, ios, ping] Can't ping iphone?[ok] Check WPA settings. Set to "WPA2 个人版(WPA2 AES)" instead of "WPA / WPA2" solved the problem for me.[high latency, unstable] seems related to 2.4GHz. I'll try 5GHz.5.7[ ] Rust 内核调度器? https://arighi.blogspot.com/2024/02/writing-scheduler-for-linux-in-rust.html5.1[wifi, cli]nmcli dev wifi connect sic-guest password xxxkernel modulelsmod | grep wifisudo modprobe -r <模块名> # 例如:sudo modprobe -r iwlwifisudo modprobe <>or sudo systemctl restart NetworkManager-dispatcher.service[watch with sudo, ok] watch -n 2 "echo xxx | sudo -S ls"4.29[dataset, visualize] huggingface 上录的数据集可以可视化: https://huggingface.co/spaces/lerobot/visualize_dataset?dataset=julyfun%2Fso100_pick_and_place_v4_50&episode=0[机器人动力学大纲] https://blog.csdn.net/Bellwen/article/details/129200899拉格朗日力学多自由度机器人的动力学方程机器人的静力分析坐标系间力与力矩的变换[毕设] 写论文看这个,讲到了各种痛点: https://www.bilibili.com/video/BV1QxB9YuERU22:04 视角 Diversity 可视化4.27[pi0 and VLA introduction] https://huggingface.co/blog/pi04.25[flow-matching, diffusion] 经典知乎直观理解 diffusion: https://zhuanlan.zhihu.com/p/11228697012[diffusion, DDIM, DDPM, flow-matching] 知乎公式推导: https://zhuanlan.zhihu.com/p/125919305204.24[ssh, gui, x11, xquartz, x11-forward]今天以如下 config,macos 本地 export DISPLAY=:0 后 ssh xxx,直接运行 xclock 可在 mac 端显示.还需要在 XQuartz 菜单中,前往 Preferences → Security. 确保勾选 "Allow connections from network clients"Host xxx HostName 127.0.0.1 Port 33446 User xxx ProxyJump xxx.com LocalForward xxxx 127.0.0.1:xxxx LocalForward xxxx 127.0.0.1:xxxx ForwardX11 yes TCPKeepAlive yes ProxyCommand ssh -CY -W -N -v %h:%p xxx.com4.22Today installed ubuntu!uv install python? Must explicity choose python==3.10.16python 3.10.0 or python 3.10 will encounter tk init.tcl error.[torch, nvidia-smi] 运行 torch 项目时,torch torch._C._cuda_getDeviceCount() 报错发现 nvidia-smi 也没了[ok] 重启电脑解决. ref 地址忘了。4.19@State 等装饰器的解析: https://fatbobman.com/zh/posts/exploring-key-property-wrappers-in-swiftui/[坐标变换, transform, pnp] 以下说法等价:某点在 A 下的坐标为 p, B 下坐标为 Tp,[A to B] 坐标系 A 到坐标系 B 的变换为 T .[A in B] A 的轴和原点在 B 下可用 T 表示. T 的第一列是 A 的 x 轴在 B 下的表示.[ros tf2] target = B, source = A (通常 target 为 base, source 为执行器)注意:A2C = B2C * A2B例如:pnp 给出的 tvec 是自定义系的坐标原点在相机系下的表示,即 pnp 变换给出的变换被称为:自定义系 to 相机系的变换或者说自定义系点 x 经过 Tx 得到相机系下表示平移旋转顺序:当你观察某点从 A 系表述转换到 B 系表述时:先将 A 系表述旋转 R,再加上平移量 T.当你观察 B 系的轴如何转换到 A 系轴时:B 先在自己系下平移 T,然后再自己系下延伸出 R 三个列向量.4.4[ssh, network] 这后面四个选项加了似乎 zerotier 内网 ssh 连接稳定多了Host 4070s HostName 10.238.189.187 User julyfun Port 2222 RequestTTY force IPQoS throughput # 避免 QoS 限制 Compression yes # 启用压缩 Ciphers [email protected] # 改用低开销加密 ServerAliveInterval 15 # 保持连接4.2[good] Mobile ALOHA前传之VINN, Diffusion Policy和ACT对比_act和diffusion policy-CSDN博客3.10[x] 黄缘高背研究 https://xuebao.dlou.edu.cn/article/2018/2095-1388/201806013.html[ ] 黄缘生长研究 http://journal.xynu.edu.cn/cn/article/id/3481b16c-1ded-43f0-9c59-a32e86f9b5fc3.7win + space 前几天能正常切换输入法。今天突然变成会在窗口左上角打开一个带“还原,最小化”的windows窗口菜单,怎么会是[ok] 重新插拔键盘A6000 配 frp? to try:简单博客园: https://www.cnblogs.com/tmpUser/p/14221838.html详细博客园: https://www.cnblogs.com/INnoVationv2/p/16442967.html3.4[ios, view dev app file][ok] insert these two keys two:UIFileSharingEnabled: TrueLSSupportsOpeningDocumentsInPlace: Trueref: https://stackoverflow.com/questions/49128223/how-to-view-the-files-directories-created-by-my-ios-app-in-xcode[lerobot, dp]simplest trainng with on commit 5daa454, ok with python3 examples/3_train_policy.py[dl basic]step: train a batchepoch: train through the dataset onceepisodes: ONLY IN RL. Interact from start to end once.从初始状态到终止状态的完整交互序列。例如,在游戏中,一个episode是从游戏开始到游戏结束的整个过程。3.2something20:29 back to swift bson object writing.. buy Cursor Pro.20:53 BSON? -> had to learn Swift again[ios, xcode] After adding dependencies, import Module : failed[ok] readd the Module确保有 add to target: TargetName 选项2.28[DDPM, DDIM] 正常写的 DDPM。DDIM 利用一个概率推论进行隔步采样,提升推理速度。[Xcode, add dependencies][err] Authentication failed because no credentials were provided[ok] 我关闭了 gitconfig 的 URL 替换就可以了[next time] 可以试试这个 https://github.com/KeyboardKit/KeyboardKit/issues/78#issuecomment-1121145834# [url "[email protected]:"] # insteadOf = https://github.com/2.27[ios, xcode, camera usage, err]打开相机时崩溃,需要 Privacy...[ok] https://stackoverflow.com/questions/67896404/where-is-info-plist-in-xcode-13-missing-not-inside-project-navigatorimage.png|7002.27[x]2.27[x]2.26[wsl, matplotlib, chinese font]sudo apt-get update sudo apt-get install fonts-wqy-microhei fonts-wqy-zenhei sudo fc-cache -fv(如果其他步骤不行,继续运行:)# 创建字体目录(如果不存在) sudo mkdir -p /usr/share/fonts/windows # 创建符号链接到 Windows 字体目录 sudo ln -s /mnt/c/Windows/Fonts/* /usr/share/fonts/windows/ # 更新字体缓存 sudo fc-cache -fvimport matplotlib.pyplot as plt import matplotlib.font_manager as fm import matplotlib as mpl # [must] 删除这里输出的 dir print(mpl.get_cachedir())plt.rcParams['font.sans-serif'] = ['SimHei', 'WenQuanYi Micro Hei', 'WenQuanYi Zen Hei', 'Microsoft YaHei', 'SimHei', 'DejaVu Sans'] plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题如何检查字体:def check_font(): print("Available fonts:") fonts = [f.name for f in fm.fontManager.ttflist] chinese_fonts = [f for f in fonts if ('micro' in f.lower() or 'wenquanyi' in f.lower() or 'microsoft' in f.lower() or 'simhei' in f.lower())] for font in chinese_fonts: print(f"- {font}") check_font()2.21[csdiy] for lmzhttps://wdxtub.com/work/4070s added something here.mac added something else here.2.12[wsl] lerobot[err, ok] GUI 无法渲染? export WGPU_BACKEND=vulkan但这样就 CPU GUI 了,需要想个办法解决.[later] REF 呢!ACT 原理和实现1.原理 https://blog.csdn.net/v_JULY_v/article/details/135454242实现 https://blog.csdn.net/v_JULY_v/article/details/135566948[err] train.py 时,hf.co 下载数据有网络问题:[ok] 使用命令行添加以下环境变量:os.environ['CURL_CA_BUNDLE'] = '' os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'..训练中...[err] 居然遇到极其罕见的 address boundary error!估计是 torch 版本错了,重新安装.2.9[wsl, disk, disk-space] 压缩 wsl2 磁盘空间https://blog.csdn.net/qq_42493281/article/details/142614928?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-1-142614928-blog-135723290.235%5Ev43%5Epc_blog_bottom_relevance_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7Ebaidujs_baidulandingword%7ECtr-1-142614928-blog-135723290.235%5Ev43%5Epc_blog_bottom_relevance_base3&utm_relevant_index=2其中 ext4 位置获取方式: https://learn.microsoft.com/en-us/windows/wsl/disk-space#how-to-locate-the-vhdx-file-and-disk-path-for-your-linux-distribution即命令 (Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"mine is C:\Users\julyfun\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx[ok] seem to work today.Wsl docker 有独立 vdisk,也可以查查形如 C:\Users\julyfun\AppData\Local\Docker\wsl\diskdiskpart select vdisk file="C:\Users\julyfun\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx" attach vdisk readonly compact vdisk detach vdisk exit[vscode-copilot, wsl, network] keeps saying "you are currently offline"[ok] see: https://github.com/microsoft/vscode-copilot-release/issues/3275#issuecomment-2560561520[zig, vscode, lsp] zig specific zls setting: "zig.zls.enabled": "on", "zig.zls.zigLibPath": "/home/julyfun/zig/0.14.0-dev.2577+271452d22/files/lib",2.5Clash verge 2.0.3 macos 14 开 TUN 以后所有节点就 Error?[ok] try this, seems ok for me. image.png|500[err] 25.3.4 开启 TUN 后浏览器正常,测试节点全可,但 xcode 浏览 add dependencies 困难,且 clash 测试网站看上去像没翻. 暂时关闭 TUN1.16[win, cfg, harm] https://blog.csdn.net/yusuhbdybxbdhj/article/details/134295439做了此博客方法二试图关闭 win 自动更新1.12[c, bug, strange, rerun] 修改函数竟然导致某个毫无关系的函数行为突变?建议检查是否有变量或数组没有初始化或合理处理字符串尾部 \0今天是因为修改后程序地址变化,导致初始化数组发生了随机内容变化.1.9[dh, dh 表, dh table]同时看以下两篇:https://blog.csdn.net/m0_53966219/article/details/125569775https://www.bilibili.com/opus/678485643185094659[by-someone]通常需要相邻三个关节才能确定 $i$ 处的值. 第 $i$ 个坐标系定义在第 $i + 1$ 个关节 $z$ 轴上.关节 i 旋转轴为 zi 轴取 $z_i$ 与 $z_(i + 1)$ 的公共垂线段,两点定义为 $O_i^prime$ , $O_(i + 1)$x 轴:从 $O_i^prime$ 到 $O_(i + 1)$ 的方向. 公垂线方向.ai: $O_i^prime$ 到 $O_(i + 1)$ 长度,公垂线段长度。两轴相交时为 0.di: $O_i$ 到 $O_i^prime$ 的长度。两轴平行时似乎任意,可为 0.$alpha_i$: $z_(i - 1)$ 轴到 $z$ 轴旋转角. 将后一坐标系的 x 轴作为旋转轴可以确定正方向.两轴平行时为 $0$.$theta_i$: x 轴夹角. 以 $z_(i - 1)$ 为旋转轴. 通常就是关节角。image.png|500最后一个坐标系在 tcp,方向可参考下图:image.png|400[wsl2, disk, windows] 压缩 wsl2 硬盘空间(单调递增的)[untested]https://msyanblog.com/linux/wsl2-free-virtual-disk-space/1.8[tree, hide ignored] git ls-tree -r --name-only HEAD | tree --fromfile1.7[python, geometry, lib] python 2d 几何包 shapely: https://www.cnblogs.com/feffery/p/16989398.html以后还是先搜搜相关包吧.1.1RuntimeError: cuDNN Frontend error: [cudnn_frontend] Error: No execution plans support the graph.ref: https://huggingface.co/posts/beomi/478366490704768[ok] Fixed by using pytorch 2.4.0 rather than 2.5.0pipeline = DDPMPipeline.from_pretrained('julyfun/sd-class-butterflies-32')[err] this can't find bin file.[ok]: huggingface-cli download julyfun/sd-class-butterflies-32 then reload the pipe.12.25[gpu, memory] 杀了这些以后 GPU memory 正常了:PS C:\Users\julyfun> Stop-Process -Name "ToDesk" -Force PS C:\Users\julyfun> Stop-Process -Name "slack" -Force PS C:\Users\julyfun> Stop-Process -Name "slack" -Force PS C:\Users\julyfun> Stop-Process -Name "rustdesk" -Force PS C:\Users\julyfun> Stop-Process -Name "todesk" -Force PS C:\Users\julyfun> Stop-Process -Name "todesk" -Force PS C:\Users\julyfun> Stop-Process -Name "explorer" -Force PS C:\Users\julyfun> nvidia-smi[LDM] 非常好 stable diffusion: https://www.zhangzhenhu.com/aigc/%E7%A8%B3%E5%AE%9A%E6%89%A9%E6%95%A3%E6%A8%A1%E5%9E%8B.html非常好的自注意力和多头注意力: https://www.cnblogs.com/lipu123/p/17717446.html[DPM baseline]数据集格式: zarr[ARKit]ARKit 同时录制普通相机和超广角相机是不可能的: https://developer.apple.com/forums/thread/719837[waveshare, arm, bug] I can open arm serial, but no response[maybe ok] Plug in type-c first, then charger12.24dp 含代码: https://blog.csdn.net/v_JULY_v/article/details/14365171812.20简单微调个 yolo11m-segCould not load library libcudnn_cnn_train.so.8. Error: /usr/local/cuda/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8: undefined symbol: _ZN5cudnn3cnn34layerNormFwd_execute_internal_implERKNS_7backend11VariantPackEP11CUstream_stRNS0_18LayerNormFwdParamsERKNS1_20NormForwardOperationEmb, version libcudnn_cnn_infer.so.8可能是 torch cu121 + nvcc 12.3 导致的问题[ok] 换为 torch cu118 + nvcc 11.8 解决. (可直接在该 conda 环境下 pip uninstall + install)12.19[x] diffusion & flow matching 几何理解: https://zhuanlan.zhihu.com/p/1122869701212.18[ok] 上传 python package 到 pypi:setup 和文件结构查看 https://github.com/julyfun/fast_mathpython setup.py sdist bdist_wheel ...<your options> twine upload --repository testpypi dist/* --verbose.install mac arm64 版本后报错 dlopen x64? 构建时不要用 conda 执行 setup.py,在 venv 或者系统环境下执行.[arkit]ARKit之路-运动跟踪原理: https://blog.csdn.net/yolon3000/article/details/107675989doc https://developer.apple.com/documentation/arkit/arkit_in_ios[camera pose]https://stackoverflow.com/questions/45084187/arkit-get-current-position-of-arcamera-in-a-scenenano 12.19GLIBCXX 3.4.29 not found?[ok] strange way: https://blog.csdn.net/weixin_39379635/article/details/12915971312.17Link opencv on macos shows libavcodec<...>.dylib not found[ok] 这次因为手动编译的 opencv 和 brew opencv 同时存在,前者覆盖了后者 Config 导致的,用 install_manifests.txt 卸载手动编译的即可[err] pyudev 在 docker 中能发现 USB 但输出的 Info 都是 Unknown?[ok] use this: (ref: gpt)[bug] python3 setup.py install doesn't compile pybind11 cpp[ok] clean /builddocker run -dit --privileged -h $(hostname) --net=host -v /dev:/dev -v /run/udev:/run/udev -v /sys/fs/cgroup:/sys/fs/cgroup \ -v /sys/class/tty:/sys/class/tty -v /sys/devices:/sys/devices \ -e DISPLAY=$DISPLAY -e XAUTHORITY=/tmp/xauth -v ~/.Xauthority:/tmp/xauth -v /tmp/.X11-unix:/tmp/.X11-unix \ -v ~/ws/docker2:/home wave-241215:latest12.14jetson nano ros2 tf2[err] fastapi 无法 lookup_transform?[ok] 注意初始化一个节点以后必须 rclpy.spin(that_node),不然无法获取资源.fastapi hydra 多线程踩坑不要用 hydra main 模拟 class 的同时用多线程。如果 main() 创建的多个线程调用同一个 main() 中的数据,就会出 Local variable reference before assignment...12.12https://github.com/xubiaolin/docker-zerotier-planet[err] Intel CPU mac 无法启动 zerotier[ok] sudo launchctl load -w /Library/LaunchDaemons/com.zerotier.one.plistref: https://discuss.zerotier.com/t/error-waiting-for-zerotier-system-service-mac-m1/16554[err] liaoyu 的 mac vscode 无法 ssh 连我 wsl[ok] add this to vscode settings.json "remote.SSH.useLocalServer": false, "remote.SSH.useExecServer": false,[docker, waveshare, github] see 24/11/...md[docker, proxy] Error response from daemon: Get "https://registry-1.docker.io/v2/": proxyconnect tcp: EOF[ok] use http:// (no s) in https_proxywsl ssh 不稳定的话试试关了 win clash-verge 的 TUN 的系统代理jetson nano 20.04 install docker[ok] install see: https://www.forecr.io/blogs/installation/how-to-install-and-run-docker-on-jetson-nano今天用的 docker 镜像来自 https://www.cnblogs.com/cao-lei/p/14448052.html注意他给的 json 多了个 {}docker 启动错误,则用 sudo dockerd --debug 查看信息docker 不用镜像,配了 proxy (see: https://docs.docker.com/engine/daemon/proxy/#httphttps-proxy) 并从 sic-guest 换 SJTU 快多了[ok] 用了 ros humble jammy base 镜像12.11解决 teleop 开始 5s 后开始严重卡顿问题:nuc 的 Shadow project src 更换回老版本60fps 插值,move_unsafe 函数的 time 设置为 1 / 120之前发 arm wrist 的时候没有发 hand 的前两个关节.12.9?Central task execution?how-to[bug, vscode, typst] tinymist 开着,但是没有预览图标可能因为识别成 Django txt了12.6[wsl, zerotier, ssh] 如果 mac ping wsl 延迟很大,ssh 不上,检查 win 的 clash verge. 今天因为开了全局导致 ping time 350ms,web ui 也显示 300ms, 关了全局就 ok.[ ] shadow 计划:将 hand fps 拉高,不然看起来很不平滑记得更新 cpp & ringbuffer[pycocotool] 报错 cc1: fatal error: ../common/maskApi.c: No such file or directory compilation terminated. error: command '/usr/bin/gcc' failed with exit code 1.tryconda install cythonpip install cython[fail]try: pip install ... --only-binary=:all:[ok]给图为 jetson nano 刷机jetpack version is 5.1.1docker: https://docs.docker.com/engine/install/ubuntu/then: https://docs.docker.com/engine/install/linux-postinstall/装 librealsense - ok (根据 git repo 的 markdown https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_jetson.md)pytorch 不要在 torch 官网下载,前往 https://forums.developer.nvidia.com/t/pytorch-for-jetson/72048 下载 whell, pip 安装🚫(已放弃) 非 conda,装 cp38 torch2.1.0 (见下方 ultralytics)🚫 cuda 似乎这镜像不自带,try 官网下 local 11.8 (no .run for jetson)应该装 cuda 11.4 因为 torch whl 用 11.4 预编译[ok] 使用 apt 安装,见下 cudnn 的 csdn 链接cudnn: 必备. 用 apt 下载 https://blog.csdn.net/a111222zw/article/details/120632906[ok] import torch ok看 ultra 文档 https://docs.ultralytics.com/guides/nvidia-jetson/#install-ultralytics-package_1 貌似会少走很多弯路后面完全按此文档执行torch 2.1.0 也按此文档.torch.cuda 不 available?pip3 install pycuda --userref: https://forums.developer.nvidia.com/t/my-jetson-nano-board-returns-false-to-torch-cuda-is-available-in-local-directory/182498/4[ok][must] reopen shell after installing cuda or cudnn to continue some package building.[bug] When installing pycuda, src/cpp/cuda.hpp:14:10: fatal error: cuda.h: No such file or directory[?][must] torchvision should be 0.15.0 (git checkout v0.15.0-rc8)[note] use ghproxy![bug] ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory[ok, must] sudo apt-get install libopenblas-dev[BUG] TypeError: canonicalize_version() got an unexpected keyword argument 'strip_trailing_zero'[ok] fixed by pip install -U packagingref https://github.com/pypa/setuptools/issues/4483pip 有 ERROR 是正常的,往下装就行 (?)[bug] build from source and install,import torchvision version 不变[ok] 因为有多个 torchvision 被装在不同的 site-packages 下了,可以多次 pip uninstal 它们.[fail] run yolo model, 报错 torchvision 和 torch 不兼容switch torchvision version![ok] 配置好可以 yolo 了cuda-11.4cudnn8 from apt (csdn link above)全局 python 3.8torch from nvidia whl 2.1.0torchvision 0.15.0 build from source using cuda-11.4git push asks for https://github.com username?Check git remote -v, this should not be https but rather [email protected] nano orin 20.04:Clash Verge: 使用 WEBKIT_DISABLE_COMPOSITING_MODE=1 clash-verge 启动 clash verge记得安装 ..2gtk4.0-37[ok]12.2[抵抗困倦] 玉兰苑鸡排铁板烧吃了 70% + 饭后散步 15min昨日睡眠 7h20min 后困的不行. 睡着了 1h11.30视觉注意力机制: https://www.zhihu.com/question/485458547/answer/309337209811.29GPIO 协议 8 模式图解: https://blog.csdn.net/weixin_45784125/article/details/13912598711.28rust 线程池: https://www.cnblogs.com/linyihai/p/15885327.html11.27这两天 lmz 的 AWS 一直没法 SSH 连,已配好 SSH 安全组,仍然报错kex_exchange_identification: Connection closed by remote host[success] 是 Clash 问题,AWS 和 aliyun 都会 ban vpn ip,所以直接开直连就连上了.ImportError: /home/julyfun/miniconda3/envs/ml/lib/python3.9/site-packages/torch/lib/../../nvidia/cusparse/lib/libcusparse.so.12: undefined symbol: __nvJitLinkAddData_12_5, version libnvJitLink.so.12情况:torch 2.5.0+cu121, import torch 报错.[success] /usr/local/cuda 指向了 12.3 报此错,改为 11.8 正常 importStreaming-Grounded-SAM-2torch2.3.1+cu121nvcc 12.3triton error? ref: https://github.com/triton-lang/triton/issues/625just pip uninstall triton and pip install triton (wtf why ok?)python demo.py --model Qwen2-7B-Instruct-AWQ[success][ ] 👍 舵机原理: https://blog.csdn.net/weixin_38288325/article/details/132366604机器人动力学:牛顿欧拉法,拉普拉斯方程11.26不错的自监督学习简介, 含损失函数: https://juejin.cn/post/721105318473103775411.2411.25SG90 舵机: http://www.51hei.com/bbs/dpj-156595-1.html11.24web typst: https://www.npmjs.com/package/@myriaddreamin/typst-ts-web-compiler[wsl, disk] 统计 wsl disk 占用: sudo ncdu / --exclude /mnt (apt)11.2311.18NOIP 真题: https://github.com/winterant/oi后验 ref: https://blog.csdn.net/qq_23947237/article/details/78265026知目的地 15 公里,知小哥到达时间 20min,求小哥走路、骑车和开车的概率开车概率比较大,由果反推因概率,这是后验概率,记为 $P(theta | x)$先验知小哥喜欢健身,求小哥走路、骑车和开车去公园的概率走路概率比较大。由因推过,先验概率,记为 $P(theta)$最大似然估计(ML,Maximum Likelihood)目标是找出一组参数 $theta$,使得模型产生出观测数据 $x$ 的概率最大:[ ] 看完 h2l 后看看 transformer 另一解析: https://jalammar.github.io/illustrated-transformer/speit ML AE & GAN:AE 就是自己学习降维,Encoder 输出位若干维度向量.VAE 的 Encoder 输出改为一个均值和一个标准差.image.pngwin10 机房 FTP 配置: https://blog.csdn.net/2301_78216479/article/details/138161487[success]11.17C++ easy debug extension: C/C++ Runner (click button debugging)11.16wsl install font: https://blog.csdn.net/u010469411/article/details/130420529For my typst, download SongTi SC Regular & Bold & Black: https://en.maisfontes.com/font-family/download-songti-fonts?utm_source=search11.15ssh win failed[done] clash verge 开了全局11.13C++ GUI with python - imgui: https://pyimgui.readthedocs.io/en/latest/guide/first-steps.htmlGaussian Splatting 数学原理: http://www.yindaheng98.top/%E5%9B%BE%E5%BD%A2%E5%AD%A6/3DGaussianSplatting.html#splatting优化问题,RL 和 DL优化问题: 知 F(x), 梯度下降求 x 最小化 FDL: 不知 F(x),知若干对 x, y,用各种权重层 w 拟合 F一个 batch 内,固定 x,从而知 Loss,求 w(视为自变量)最小化 Loss,转变为优化问题RL: 这是一个多步问题不知 V(s)11.12G-SAM-2. 目标:根据 TEXT_PROMPT 分割小熊虫Run python grounded_sam2_local_demo.py in dockerFailed to load custom C++ ops. Running on CPU mode Only!Tried this:https://github.com/IDEA-Research/Grounded-Segment-Anything/issues/152还是一样报错后来我用了 python grounded_sam2_hf_model_demo.py,没去测 local_demo,没报上述问题File "/home/appuser/Grounded-SAM-2/grounded_sam2_hf_model_demo.py", line 132, in <module> detections = sv.Detections( TypeError: Detections.__init__() got an unexpected keyword argument 'mask'重新 make run,可以通过视频识别基础测试[undone]试图使用 G-SAM1直接 make build-image,运行警告 CPU mode only手动修改 Dockerfile, 依据 https://github.com/IDEA-Research/Grounded-Segment-Anything/issues/434apt install 处报错. [unnoted][undone]试图不用 Docker (构建失败时间代价太大),用 conda低级错误: 环境变量 CUDA_HOME[success] text prompt 输出分割图片成功!下面安装命令行 colmap (wsl2, ubuntu22.04)先 https://colmap.github.io/install.html#pre-built-binaries我使用 cmake -DCMAKE_CUDA_ARCHITECTURES=89 ..ref: https://docs.nvidia.com/datacenter/tesla/drivers/index.html#cuda-arch-matrixmake -j8sudo make install[success]d2l.transformer记得用 AI11.9reluctant tasks: william 的备课.just ok11.8[ ] typst OCR 试试这个: https://github.com/ParaN3xus/typress11.6SuGAR:生成 colmap 数据集黑物体容易重构失败 (右下角 images 突然减为 0,发生间断)物体偶尔露出屏幕外没事Dense 很慢,2h 的样子Installcuda 12.3 不行,见 readme安装 gaussian 时还是报错 error: [Errno 2] No such file or directory: ':/usr/local/cuda/bin/nvcc' ?因为 $CUDA_HOME 环境变量多了个冒号. 去环境配置里把冒号删了就 okfish shell is ok[success]以以下文件结构成功开始 Traindataset ├── database.db ├── images │   ├── 5_0.jpg │   ├── ... │   ├── 5_98.jpg │   └── 5_99.jpg └── sparse └── 0 ├── cameras.bin ├── images.bin ├── points3D.bin ├── points3D.ply └── project.ini- 报错没某某驱动,就 `conda install -c conda-forge libstdcxx-ng` - Train 过程中报错没 ninja: 记得先装之 - retrain 注意 python 参数加入 gaussian 模型 pt 位置 (see readme) - 再 retrain 可以修改 train.py 将 refined pt 模型载入之前全删了,保留 pt path - 由于 wsl2, 修改 `sugar_utils/mesh_rasterization.py:102` 处 `dr.RasterizeGLContext()` 为 `dr.RasterizeGudaContext()`(根据 issue) - [success] - 生成依托答辩的 mesh - !! 放到 meshlab 下居然非常 ok 的 mesh - 另一天重做了一次,报错:[WARNING] Background is empty. Finished computing meshes. Foreground mesh: None Background mesh: None -----Decimating and cleaning meshes----- Processing decimation target: 200000 Cleaning mesh... Traceback (most recent call last): File "/home/julyfun/Documents/GitHub/SuGaR/train.py", line 157, in <module> coarse_mesh_path = extract_mesh_from_coarse_sugar(coarse_mesh_args)[0] File "/home/julyfun/Documents/GitHub/SuGaR/sugar_extractors/coarse_mesh.py", line 478, in extract_mesh_from_coarse_sugar raise ValueError("Both foreground and background meshes are empty. Please provide a valid bounding box for the scene.") ValueError: Both foreground and background meshes are empty. Please provide a valid bounding box for the scene. - 试试看 colmap 删除未提取的图片 - 怀疑不能抠图 - [undone]Grounded-SAM 2 抠图可以手动扣小熊虫 🆗11.5cuda12.3 装 torch 确实只需要:pip install torch==2.5.0 torchvision==0.20.0 torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu121https://pytorch.org/get-started/previous-versions/11.2amov doc: https://docs.amovlab.com//allspark2-orin/#/src/%E5%BC%80%E5%8F%91%E5%B8%AE%E5%8A%A9/%E5%AE%89%E8%A3%85%E7%BB%84%E4%BB%B6/%E5%AE%89%E8%A3%85%E7%BB%84%E4%BB%B610.31生物对称机理:https://www.perplexity.ai/search/sheng-wu-wei-shi-yao-neng-chan-9yrtH0kGTN.Wr6yfiWageA某硕士地暖铺设: https://skemman.is/bitstream/1946/42094/1/masters-14.pdf机器人轨迹覆盖 https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=649051[ ] 基础调参技巧 https://www.zhihu.com/question/25097993/answer/341049737810.30[薛寒, xuehan, 学长, 论文] https://github.com/xiaoxiaoxh/UniFolding10.29激励文章: https://mp.weixin.qq.com/s?__biz=MzkwNDMxMzg1NA==&mid=2247484280&idx=1&sn=12621abd79c5ca8431795a1bb1b10340&chksm=c089ade9f7fe24ffb05207a739e866d5fb49cf3e0100956f81ab65f186ea39cf343b179709a3&scene=21#wechat_redirect华人图谱!10.28机器人会议: https://www.cnblogs.com/Gaowaly/p/18419856[25.5.14 sup] https://blog.csdn.net/Yong_Qi2015/article/details/137660117youtube 字幕下载: https://downsub.com/zh/site/youtube/10.21睡觉 3:10 - 7:5010.20睡觉 3:30 - 12:00http://moodle.speit.sjtu.edu.cn/pluginfile.php/46609/mod_resource/content/1/SJTU__2024_European_fiscal_policy.pdf10.19重配宿舍服务器内网穿透[ ] zzx?[ ] 使用 mfa 配穿透?省的额外交钱这样就可以修好 how-to 网站了[ ] 微调小 LLM睡眠 4:00 - 11:50, 午觉 2h+...10.18WOOCLAP.com 实时学生答题[ ] 配置 p2p: https://linux.do/t/topic/75095/36?page=28-10 在配 rustdesk p2p, 直接用 zerotier ok 但是非常慢为什么不考虑向日葵呢(😁10-11 做 ml tp 6怎么花的有点久了糟糕的睡眠似乎长久以来降低了我所有工作的效率!睡眠 3:30 - 7:5010.16睡眠 4:30 - 7:40 wtf看起来 wsl2 不支持 NUMA 从而无法使用 tensorflow gpu10.15report遗传算法编码 fail - 代码kruskal 没有拓展性约定加分项18:40 实验室 +300洗澡 +100决策树回忆提纲: https://blog.caiyongji.com/2021/02/25/machine-learning-5.html[ ] rustdesk p2p 打洞: https://luotianyi.vc/6542.html[ ] https://unifolding.robotflow.ai/10.14遗传路径规划: https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=134520310.13cget c++ 包管理: https://github.com/pfultz2/cget10.11[ ] 支持向量入门: https://zhuanlan.zhihu.com/p/40857202[ ] 支持向量简单: https://cuijiahua.com/blog/2017/11/ml_8_svm_1.html[ ] 支持向量数学 https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/stat-learn-svm.html[ ] 简洁的支持向量: https://blog.csdn.net/chikily_yongfeng/article/details/10560715410.9[x] 尝试 mkdocs + wypst 但是发现不简单Did you work for...?[ ] 强化学习概述: https://daiwk.github.io/posts/rl-introduction.html[ ] Tauri APP: https://v1.tauri.app/zh-cn/v1/guides/getting-started/setup/next-js/10.7还可以的免费文档翻译: https://www.onlinedoctranslator.com/en/?utm_source=onlinedoctranslator&utm_medium=docx&utm_campaign=attribution10.5[ ] 值得一做,遗传算法,OJ 算法题: https://www.cnblogs.com/Link-Cut-Y/p/17281139.html奇怪的工程搜索网站: https://explorer.globe.engineer/10.2[robot, urdf] urdf 描述:link 和 joint 均为一个坐标系joint 有 parent link 和 child link,其 child link 坐标系与 joint 永远一致joint 发生运动时,其坐标系将发生运动,计算方式为: <origin> 描述了 joint 在原始状态下相对 parent link 坐标系的变换,与此同时通过 <axis> + 变量 q 来决定额外发生的变换<axis> 形如 <axis xyz="1 0 0" />,这里 xyz 是 joint 自己原始状态下的 xyz也就是说 joint 运动时相对上一个 joint 的变换会更新,但相对下一个 joint 的变换不会更新[x] 四元数插值: 球面线性插值 or 线性插值(需归一化)#def 四元数w = cos(theta/2) x = ax * sin(theta/2) y = ay * sin(theta/2) z = az * sin(theta/2) - 表示旋转轴单位向量 ax, ay, az,旋转角 theta - 四元数多对一旋转:考虑反转旋转轴和旋转角10.1[x] 李群李代数指数映射对数映射: https://blog.csdn.net/shao918516/article/details/116604377大学各种微分方程: https://blog.csdn.net/qq_35357274/article/details/1099351699.30shadow hand 手指关节定义 https://www.shadowrobot.com/wp-content/uploads/2022/03/shadow_dexterous_hand_e_technical_specification.pdfnuc 网络修复日志nmap -sn 10.9.11.0/24昨天晚上开始彻底连不上 nuc 了 ssh: connect to host 10.9.11.2 port 22: No route to host ping 不通换网线没用换 nuc USB / 路由器网口,没用。经测试网口 + 网线 + 拓展坞配套能让 mac 接入局域网nuc 接到 laptop 工位这里的网线和拖线板上,居然可连了用 nuc 桌面取消了自动连接的 Wifi插回工作台拖线板,又不可连了又接到 laptop 工位上,又可连了怀疑拖线板插座质量问题,接回工作台拖线板,从第三个插座换第五个,居然可连了从第五个插座换回第三个,居然依然可连也就是说所有配置和昨晚不变(除了 Wifi),换来换去就可连了过了十分钟又坏了换到第五插座又好了,希望这次稳定点9.29睡眠 2:30 - 8:45 | -150中心任务打断:下去看参观交龙的人工作上课迟到 -600[ ] 80min 内链路层 160[ ] 准备计网 TP 60[x] 60min 内实习报告 +240实际上花了 3h 多CCF 会议期刊分类 https://ccf.atom.im/9.28[ ] easymotion9.27配置 wsl 内网穿透 👌🏻 以下 ok[x] https://blog.csdn.net/weixin_43224069/article/details/130619170[x] https://blog.csdn.net/weixin_43224069/article/details/130621752坑点:注意 vscode remote-ssh 连接时需要特殊配置,见文章 kex不开 Clash Verge TUN + 服务模式会龟速,开了 TUN 如果不直连的话,可能会访问不了阿里云服务器[ ] wsl 配 cuda, 没错 wsl2 下需要又配一次: https://blog.csdn.net/VVBBBBB/article/details/134129558[x] 我按照另一教程多版本 cuda + cudnn 安装成功: https://blog.csdn.net/tianzhenba/article/details/137403606除了 cudnn 的 cp 命令文件夹名需要调整以外,都 ok. I use:sudo cp lib/libcudnn* /usr/local/cuda-12.4/lib64/ sudo cp include/cudnn.h /usr/local/cuda-12.4/include9.26睡眠 3:30 - 8:30 + 11:30 - 15:00 | -210 - 210中心任务打断[x] FASTAPI: https://www.runoob.com/fastapi/fastapi-request-response.html +50[x] 10.2 +150[x] 1.2 +150[ ] 计网链路层 +150[ ] 大拇指 ik +200[ ] 首先看清楚 quest3 旋转轴[ ] Cookie 的具体属性: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Cookies[ ] 生成对抗网络的损失定义: https://blog.csdn.net/DFCED/article/details/1051750979.25睡眠 1:30 - 8:30中心任务打断.[ ] 大拇指 ik: 主要是之前仓库的接口比较抽象 +200[ ] ruckig?[ ] opentv 优化库[ ] 8 自由度 ik[x] 准备英语自我介绍 +1009.23睡眠 7:15 ~ 11:50中心任务打断3d 重建: https://github.com/graphdeco-inria/gaussian-splatting9.20睡眠 5 ~ 11:30中心任务打断光纤百科[ ] 计网 下一章9.19装了电脑9.18中心任务打断新闻修复 mac vscode bug9.15中心任务打断jst.fish9.14中心任务打断:github.comjst.fish++[ ] rviz show obj +300stl -> urdf -> RobotModel component[ ] 臂力器购买9.12typst FAQ 中文: https://typst-doc-cn.github.io/guide/FAQ.html旋转广义插值: https://zhuanlan.zhihu.com/p/887803989.11深度学习名词扫盲: https://blog.csdn.net/qq_18555105/article/details/121345833数据集如何放置: https://blog.csdn.net/weixin_61961691/article/details/1394363869.9markdown 转微信公众号文章 https://md.qikqiak.com/9.2 周一计划exe-total: -200 - 280 = -480中心任务打断:how-to 分布式仓库 ++linux zedjst.fishjst.fish搓背jst.fish[ ] 录制 optitrack +2008.25 周日计划[x] 考察大零号湾集训场地,尝试 ipad / mac 投屏8.24 周六计划exe-total: 0中心任务打断[ ] jfmfoi 打印初赛练习题 +50[ ] 14:00 - 17:00 优雅地上课 +2008.23 计划exe-total: 0中心任务打断其他中午迟到 10min ++水群清理磁盘[x] jfmf 详细表 +50 early++[x] 完善 aubo readme +100[ ] jfmfoi + william 备课 +150[x] 准备实习报告图片视频材料 +50[ ] 碰撞调用 plan() 尝试 +100[x] 校方实习评价表 +100[x] 离职手续 +50[ ] 安排杭州旅游 +100[ ] 给学生买书?others[ ] AnyTeleop、Open-TeleVision、Bunny-VisionPro——从RGB相机到VR远程控制机器人: https://blog.csdn.net/v_JULY_v/article/details/1403848108.22 计划exe-total: 250 - 600 - 210 = -560中心任务打断写完安排困倦疲惫睡觉 +++steamzhihuqq music[ ] 备课 jfmfoi 和 william: +100[ ] jfmfoi 理解初赛答题 +100[ ] 今天得会默写 transformer 了吧 +400[x] jfmfoi 询问是否可集训 +50[x] jfmfoi 集训安排详表 +200其他[ ] 机械臂雅可比教程: https://www.cnblogs.com/caster99/p/4725914.html8.21 计划exe-total: 450 - 280 - 600 + 100 = -330中心任务打断zhihu rust lifetime ++zed preview黑吗喽新闻jst upa飞书文档知乎wishlist -280[x] 200min 滤波 +400[x] jfmfoi 后期规划 +50[ ] 会写 transformer +300[ ] rl 第二章 +100[ ] 备课 jfmfoi 和 william: +100[ ] jfmfoi 理解初赛答题 +100[x] 问问 jfmfoi 啥时候开学,是否可暑假集训 +50[x] 获得上级学长下学期课表 +50others[x] 愚蠢的静态检测消除抖动: https://www.researchgate.net/profile/Wenzhen-Yang/publication/303366293_A_Master-Slave_Control_Method_for_Dexterous_Hands_with_Shaking_Elimination_Strategy/links/5cc2b16d92851c8d22050bda/A-Master-Slave-Control-Method-for-Dexterous-Hands-with-Shaking-Elimination-Strategy.pdf8.20 计划exe-total: 600 - 150 - 360 = 90中心任务打断维基 苏林搜索游戏 CG公众号推文获取一篇论文的引用数: 上 https://www.webofscience.com/wos/alldb/basic-search 就可以搜到,而且还有引用的文章列表typst 论文模板 https://github.com/hitszosa/universal-hit-thesis搬迁 notes 部分笔记存论文xy 聊天黑吗喽回头写 win ninja how-totoml 语法灵巧手腱绳驱动fft 回忆笔记-360[x] 平滑优化 fast_control +400[x] matplot 3d 轨迹 +100[x] 和周工聊聊 next step +100[ ] 和 yzy 聊聊 RL 之复现 +200 - half[ ] 和学弟聊聊实验室怎么样了 +100 - half[ ] 问问上级学长下学期课表 +50[ ] 催各个小朋友做作业 +100others机械手消抖论文 2019: 主从式手术机器人主手消抖方法 https://www.webofscience.com/wos/alldb/full-record/CSCD:65052958.19exe-total: -50中心任务打断github 编辑notionjst.fishfishshell[x] 计网第一章 +50[ ] 30min 内双向循环神经网络 +50 failed[ ] 香橙派尝试装机至少 30min +50 failed[x] 30min 内强化学习第一章 +100notes:[ ] LLaMA 训练细节以及 LLaMA 模型 https://github.com/ymcui/Chinese-LLaMA-Alpaca/wiki/%E8%AE%AD%E7%BB%83%E7%BB%86%E8%8A%82[x] 模型显存计算 https://www.cnblogs.com/pam-sh/p/182597287B fp16 推理显存 16 - 20GB, 使用 AdamW fp16/bf16 训练需要 55-60GB 显存推理 2-3X,训练 8-10X训练时 model weight = 2X (因为 2bytes) , gradient 2X,优化器 8X微调时 model weight = 2X,Adaptor weight 可选 2.5% 比例则为 0.05X,gradient 和 optimizer states 共 0.25X8.18维尼新做了 aubo program update 解决了透传延迟的问题,现在居然稳定 8ms 延迟了,遥操作又快了。8.15双 tracker 适配也做好了,开摆!notion or notno:可渲染 typst math 的前端notion 网络不好不好被搜索不好迁移发布到知乎等yes:显示图片方便不用手动同步可视化编辑方便多端编辑很好的 AI 集成8.14[ ] tcp 图解: https://www.cnblogs.com/jojop/p/14111160.html[ ] web 多人联机卡牌,是时候启动虫虫了: https://github.com/igorsheg/set-up8.5[ ] 写一个自动化美工工具,用 segment-anything 把上传的图片分割出来并像素化,附加调亮度和手动调整像素格功能。输入:上传图片 + 物品名称。输出:像素化,背景透明的物品图片。8.3https://products.codeporting.app/zh/convert/ai/cpp-to-python/8.2...* (HEAD -> main, origin/main, origin/HEAD) readme 24-08-02 13:01 5259837 Julyfun MacOS14.5 M1 * init bug 24-08-02 13:01 c0e2adc Julyfun MacOS14.5 M1 * readme 24-08-02 13:01 9b9e6fa Julyfun MacOS14.5 M1 * correct jst-mfa command usage 24-08-02 12:12 3417259 Julyfun MacOS14.5 M1 * 用 return 代替部分 return 0 以返回上一命令是否成.. 24-08-02 12:12 e624d2f Julyfun MacOS14.5 M1 * 结构更新,采用 XDG 范式;新增 usage-count 24-08-02 12:12 0fb8d2e Julyfun MacOS14.5 M1下午班[x] SE3 插值: https://github.com/stack-of-tasks/pinocchio/blob/master/examples/interpolation-SE3.cpp难崩。晚上班[ ] 如果当前这个 publish traj 的方案行不通,再用这个试试: https://www.perplexity.ai/search/xiang-moveit-group1-joint-traj-6qX9SW4pTVikXsLrVYpzng#0其他[x] Linux 基本目录规范 ——XDG 介绍: https://winddoing.github.io/post/ef694e1f.html8.1摸鱼中,有空想给 how-to 写个 ai.add this to roadmap[ ] astro 前端入门: https://www.cnblogs.com/chuckQu/p/17413402.html 这是拷贝外网文章,然而外网原文居然代码块元素挂了7.31睡眠昨晚修服务器 + 娱乐,最后睡了 6.5h 左右。什么时候集成小米手环 api 直接统计我睡眠数据啊。今天一定要打开生产力模式!上午班结果上午班又新闻 + 博客玩了一会儿。最后时间刷了会 Typst 和 Latex 的旧闻。下午班先看了下 zig 增量编译咋样了,没查到,根据论坛找到了 rustc 的增量编译相关:https://rustc-dev-guide.rust-lang.org/queries/incremental-compilation.html#the-basic-algorithm也不知道增量编译会不会在 link time 增量呢,没写过编译器不懂。[x] 梯度下降轨迹规划速览: https://www.cnblogs.com/ironstark/p/5544164.html[x] mediapipe 手部姿态识别官网 demo: https://mediapipe-studio.webapps.google.com/demo/hand_landmarker?hl=zh-cn[x] 人手为何 27 自由度: https://www.zhihu.com/question/21710229 其实我只是想获取手心姿态[x] 获取 2.5D 手部姿态论文介绍: https://juejin.cn/post/7268955025211424779 终于在看新玩意了[ ] 论文: https://arxiv.org/pdf/2006.10214[ ] 2017 年 rgb => hand3d https://github.com/lmb-freiburg/hand3d[x] Open-Television 新出的低延迟遥操作,带 ik smooth 算法: https://arxiv.org/pdf/2407.01512[ ] 其中提到 dex-retargeting,将人手关键点转换为关节角度 本质上和逆解类似,in: 手指位置 method: 优化问题最小化机械手关节位置和手指关节位置差 out: 关节角度[ ] 提到向量优化用的是 Sequential Least-Squares Quadratic Programming (SLSQP) algorithm [29 ] as implemented in NLopt晚上班继续看论文尤其是 ik smooth 那篇,但是效率不是很高,环境太吵了~晚上整理宿舍,被 🐷 遇到虫折腾。其他不错的玩意[ ] SSD 系列目标检测介绍: https://blog.csdn.net/qq_27825451/article/details/89137697[ ] typst paper 官网模板: https://typst.app/universe/search/?kind=templates&q=paper 目前似乎没有跨栏图片的解决方法[ ] 变换矩阵与 SE3 关系说明: https://blog.csdn.net/weixin_36965307/article/details/123546945[ ] 更多奇妙公式 https://www.cnblogs.com/gooutlook/p/17840013.html[ ] SLAM 十四讲 B站: https://www.bilibili.com/video/BV1LT411V7zv/7.30睡眠睡太早,半夜醒来刷了会手机更睡不着。最后加起来睡了 5.5h 的样子有诗云:想得太多,睡得太早床板梆硬,床位短小天气燥热,蚊虫叮咬下午瑞幸,晚上醒脑失眠焦虑,恶性循环欲挑毛病,何患无辞上午为了新增 how-to 文章,一直在写 jst.fish下午找实时机械臂 tracking 论文。晚上先刷了会米国总统新闻和维基,又在配博客自动脚本之类的。回家折腾了海岛奇兵,发现服务器 clash 挂了没法自动更新博客,后来发现 TCP 端口被攻击,详见修复日志

485通信协议 vs TTL协议比较

2025-06-19
0625julyfunnotes

[ai]485通信协议 vs TTL协议比较基本概念RS-485协议:一种差分信号标准的串行通信协议采用平衡传输方式(两条信号线A/B)支持多点通信(最多32个节点)传输距离可达1200米(速率100kbps时)典型电压范围:-7V至+12VTTL协议:晶体管-晶体管逻辑电平标准单端信号传输(信号线+地线)通常用于板级通信传输距离短(一般不超过1米)典型电压范围:0V(低电平)至+5V(高电平)主要区别| 特性 | RS-485 | TTL | |-----------|---------------------|--------------------| | 信号类型 | 差分信号(A-B) | 单端信号(对地) | | 抗干扰能力 | 强 | 弱 | | 传输距离 | 可达1200米 | 通常<1米 | | 通信方式 | 半双工/全双工 | 通常全双工 | | 节点数量 | 最多32个(不加中继器) | 通常点对点 | | 电压范围 | -7V至+12V | 0V至+5V | | 速率 | 低速到高速(10Mbps) | 通常高速 | | 功耗 | 较高 | 较低 |应用场景RS-485典型应用:工业自动化控制系统楼宇自动化远程数据采集需要长距离传输的场合TTL典型应用:微控制器与外围器件通信板级设备间通信短距离高速通信嵌入式系统内部通信转换与兼容在实际应用中,常使用MAX485等芯片实现TTL与RS-485之间的电平转换,使微控制器能够接入RS-485网络

分析语言命名风格

2025-06-18
0625julyfunnotes

Prerequisite大小写和下划线风格仅是利用英语单词的信息冗余帮助快速理解符号的种类.不含大小写的语言将无法应用命名风格.PnpSolverConfigpnpSolverConfig单个单词时无法与小写下划线区分pnp_solver_configPNP_SOLVER_CONFIG单个字母时无法与大驼峰区分函数: 电路编码. 无状态. 有地址.函数指针:也是变量. 重载了 call 方法的变量.仅仅重载 call 方法的符号也可能可以运算.变量: 有地址.常量:无状态可变量:有状态模块 / namespace: 编译时符号类型: 编译时符号 / 内存分布规则scope全局当前函数成员注意:函数实际上只有全局.Rustfmt容易区分变量是哪种作用域:全局、成员、当前函数难以区分全局函数和局部函数.zig fmt容易区分变量是否重载了 call.容易区分变量是哪种作用域:全局、成员、当前函数难以区分全局变量和局部变量

pytorch 奇怪报错记录 for grep

2025-06-17
0625julyfunnotes

pytorch 奇怪报错记录 for grep25.6.17--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) File /home/julyfun/Documents/GitHub/julyfun/how-to/notes/julyfun/技术学习/diffusion-models-class/unit2-02_class_conditioned_diffusion_model_example.py:3 1 # %% 2 @run ----> 3 def func(): 4 net = ClassConditionedUnet(num_classes=10).to(device) 5 img = torch.randn(3, 1, 28, 28).to(device) File ~/Documents/GitHub/julyfun/robotoy/robotoy/ziglike/test.py:58, in run(func) 57 def run(func): ---> 58 func() File /home/julyfun/Documents/GitHub/julyfun/how-to/notes/julyfun/技术学习/diffusion-models-class/unit2-02_class_conditioned_diffusion_model_example.py:4 2 @run 3 def func(): ----> 4 net = ClassConditionedUnet(num_classes=10).to(device) 5 img = torch.randn(3, 1, 28, 28).to(device) 6 cls = torch.tensor([0, 1, 9]).to(device) File ~/Documents/GitHub/diffusion-models-class/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1355, in Module.to(self, *args, **kwargs) 1352 else: 1353 raise -> 1355 return self._apply(convert) File ~/Documents/GitHub/diffusion-models-class/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:915, in Module._apply(self, fn, recurse) 913 if recurse: 914 for module in self.children(): --> 915 module._apply(fn) 917 def compute_should_use_set_data(tensor, tensor_applied): 918 if torch._has_compatible_shallow_copy_type(tensor, tensor_applied): 919 # If the new tensor has compatible tensor type as the existing tensor, 920 # the current behavior is to change the tensor in-place using `.data =`, (...) 925 # global flag to let the user control whether they want the future 926 # behavior of overwriting the existing tensor or not. File ~/Documents/GitHub/diffusion-models-class/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:942, in Module._apply(self, fn, recurse) 938 # Tensors stored in modules are graph leaves, and we don't want to 939 # track autograd history of `param_applied`, so we have to use 940 # `with torch.no_grad():` 941 with torch.no_grad(): --> 942 param_applied = fn(param) 943 p_should_use_set_data = compute_should_use_set_data(param, param_applied) 945 # subclasses may have multiple child tensors so we need to use swap_tensors File ~/Documents/GitHub/diffusion-models-class/.venv/lib/python3.10/site-packages/torch/nn/modules/module.py:1341, in Module.to.<locals>.convert(t) 1334 if convert_to_format is not None and t.dim() in (4, 5): 1335 return t.to( 1336 device, 1337 dtype if t.is_floating_point() or t.is_complex() else None, 1338 non_blocking, 1339 memory_format=convert_to_format, 1340 ) -> 1341 return t.to( 1342 device, 1343 dtype if t.is_floating_point() or t.is_complex() else None, 1344 non_blocking, 1345 ) 1346 except NotImplementedError as e: 1347 if str(e) == "Cannot copy out of meta tensor; no data!": RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1 Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.context see above.[ok, but why] 重启 kernel 运行就没问题了

what-does-MLP-do-3B1B

2025-05-18
0425julyfunnotes

image.png|600结构: Linear + ReLU + Linear假设 Attention 输出的 $E^->$ 嵌入维度 10000前半 Linear 矩阵 30000x10000:image.png|500[e.g.] 第一行 $R_0^->$ 通过点乘查询:这个 $E^->$ 是否编码了“Michael Jordan” 的含义?(可包含多个含义)点乘结果直接作为输出向量的第一个元素(红框)。在例子中,若该元素为 $2$ 则认为完美匹配含义.[e.g.] 第二行 $R_1^->$ 通过点乘查询:这个 $E^->$ 是否编码了四足动物的含义?后面还有 Bais,每个元素修正一个查询结果. 例如通过 -1 来让第一个点积由 2 变成 1.中间 ReLU 层:image.png|500将前面小于 0 的结果直接变 0. 即把大于 0 当作 active,小于 0 当作 inactive.结果升维了,不再是嵌入空间,而是类似于“每一个元素代表一个查询结果”.后半 Linear 层例如 30000x10000,一定和前半相反:image.png|500[e.g.] 第一列 $C_0$ 可以理解为一个嵌入空间中的向量,将第一个查询结果 $n_0$ 转换为嵌入空间的向量. 比如 $C_0$ 可能在嵌入空间中包含“篮球,数字23”等多个意思!偏置向量可以理解为直接暴力加在结果后的嵌入向量![qm] 我靠,难道意味着一次 MLP 会植入一个信号么?最后通过残差层,将结果加入到开始的输入上. 如最上面的图

UART

2025-05-07
0425julyfunnotes

[ai, I get it]NOTETTL 是 UART 的一种实现。[ai] 在实现UART通信时,可以使用不同的电气接口标准,如TTL、RS-232、RS-485等。这些标准定义了信号的电压范围和电气特性。(1) 发送 0x55(二进制 01010101)| 字段 | 电平序列(TTL) | 说明 | | --------- | ------------------------------------------ | ---------------------------------- | | 起始位 | 0V(低电平) | 持续 1 比特时间(≈104 μs @9600bps),表示帧开始。 | | 数据 0x55 | 0V, 3.3V, 0V, 3.3V, 0V, 3.3V, 0V, 3.3V | 从 LSB(最低位 1)到 MSB(最高位 0)依次发送。 | | 停止位 | 3.3V(高电平) | 持续 1 比特时间,表示帧结束。 | | 空闲 | 3.3V(高电平) | 持续任意时间(直到下一帧起始位)。 |(2) 发送 0xAA(二进制 10101010)| 字段 | 电平序列(TTL) | 说明 | | --------- | ------------------------------------------ | ----------------------- | | 起始位 | 0V(低电平) | 同上。 | | 数据 0xAA | 3.3V, 0V, 3.3V, 0V, 3.3V, 0V, 3.3V, 0V | LSB(0)到 MSB(1)依次发送。 | | 停止位 | 3.3V(高电平) | 同上。 | | 空闲 | 3.3V(高电平) | 持续任意时间。 |起始位下降沿的同步原理注意:收发端波特率可能稍有不同,偏差最多 5% 左右。接收端并不会计算发送端的比特时间(即波特率).(1) 检测下降沿(硬件触发)空闲状态:UART 总线在无数据传输时保持高电平(逻辑 1)。起始信号:发送端通过拉低电平(逻辑 0)表示帧开始,形成一个高→低的跳变(下降沿)。接收端硬件:通过边沿检测电路(如施密特触发器)捕获下降沿,触发接收流程。(2) 重新同步采样时钟接收端在检测到下降沿后,会启动一个本地时钟计数器,按以下步骤同步:延迟至比特中点:从下降沿开始,等待 1.5 个比特时间(例如,波特率 9600 bps 时,1 比特 ≈ 104 μs,1.5 比特 ≈ 156 μs)。此时采样点位于第一个数据位的中心位置(抗干扰最强)。后续比特的同步采样:之后每 1 个比特时间 采样一次,依次读取数据位、校验位和停止位。采样时刻严格依赖初始下降沿的同步,而非全局时钟。关键点:起始位的下降沿相当于一个“时间锚点”,后续所有比特的采样均以它为基准。2. 硬件如何实现?以 16x 过采样为例现代 UART 模块(如 STM32)通常采用过采样技术增强鲁棒性。以下是典型流程:过采样频率:接收端以 16 倍波特率 的时钟频率采样 RX 线(例如 9600 bps → 153.6 kHz)。每个比特周期内采样 16 次(编号 0~15)。下降沿检测与确认:连续检测到 3 个低电平采样点(如采样点 0、1、2)时,确认起始位有效(防噪声干扰)。记录下降沿的时刻(如采样点 0)。同步采样点计算:第一个数据位的采样点位于 第 8、9、10 次采样(对应比特时间的中心区域)。通过多数表决(取 3 次采样中的多数值)确定比特值。后续比特采样:每 16 个采样周期(即 1 比特时间)后,重复中心采样(如第 24、25、26 次采样对应第二个数据位)

具身智能大模型简介

2025-05-01
0425julyfunnotes

https://www.bilibili.com/video/BV1QxB9YuERU RT1 - Transfromer 出轨迹 - 3Hz inference - 实验: - 结合仿真数据训练或者其他机械臂的数据训练,也可以学到新技能. - 少一点数据,训练效果会如何变化? - 多样性减少的影响更大!RT2:Use pretrained VLM. (PaLI-X, PaLM-E)vision language + action Co-finetune.Co-finetune how:Input:ViTLanguage modelOutput:sometimes text [err?]sometimes actionInference 的时候只会 sample action token [?]multi-TPU cloud inference在见过的任务上和 RT1 差不多没有结果的 task 上面,对世界知识的保留是非常好的.有 Emergence capability. 可从网络数据中迁移.参数数量影响结论:Cofinetune 有更好的泛化性参数量大,泛化性强引入思维链可以解决很复杂的 command.RT-X:在 OpenX 数据上训练.Trained on 9 manipulators.小规模数据训练上,超越原有模型.大规模数据训练上,RT-2-X 效果好.说明数据量大场景下需要高容量模型结构.跨具身形态训练,让模型从别的 domain 学到技能在输入中包含 image history 可以增强 generalization 性能web-scale pretaining 重要 [?]OXE (Open X Emb..) 非常 diverseRT-H:考虑到有很多任务比较的动作序列比较像.思想: 加入 Language motion 中间层。输入任务后先预测移动指令(用语言描述)好处:多任务数据共享Co-train: Internet data, action data & language motion dataLanguage motion 人类很容易干预,检查和纠正. 纠正也可以用于训练,比遥操作纠正效果更好.在新任务上需要很少的 correction.启示:lang-motion 可以 scale up 数据收集,可以压缩 action-space. 从而样本高效.但是对于复杂任务 lang-motion 可能比较复杂.OpenVLA训练数据集更大更 DiverseDidn't use internet data, use only robot data.模型结构:prethmetic VLM [?]Input to => DINOv2 and SigLIP 融合到一起的 Vision Encoder.Get spacial and high-level semantic feature.outrput => Small 2-layer MLP projector.Project to language token space [?]=> Llama2 7B language model=> Action De-tokenizer输出 action. (夹爪)性能实验:OXE 上训练out-of-the-box 直接泛化能力做了数据清洗VLA Finetune 性能实验:发现 OpenVLA 在困难 diverse 多种 instructions 多物体任务上,比原来更好归结于 OpenX 的 pretraining.Lora 实验:LoRA 在性能保持上非常好!低资源 Finetune验证 memory-efficient4bit 量化可以将 GPU memory 减半,并保持差不多的性能[下面改进 action output]problem:policy 执行每一步都有可能与误差,会累积.同一个任务的方法是多峰的使用 action chunking使用生成式建模[idea] action chunking每一步我都预测后四步,然后做加权.[idea] 生成式建模[paper] ACT (Conditional Variational AutoEncoder)...todo[paper] Diffusion Policy表达多峰分布high-dimensional, 可建模长 action 序列的分布$p(A_t | O_t)$. VAE 的 condition 是 denoising iteration $k$ 和 observation features $O_t$. 生成的是 $A_t$.$pi_0$PS:整个架构是 transfusion基于 Pretrain 的 VLM PaliGemma用 SIGLIP 作为 vision-encodergemma 是 lang model动作生成用的也是 Flow-matchingTraining recipe:Pretraining: 让模型见到各种各样的 task & behaviorsPost-training: 更高质量的目标任务的数据OXE, Bridge v2, DROID为了适应不同机器人维度,使用最大维度的 configuration vector 和 action vector 来训练。对于较小维度机器人,直接 zero-pad"mask out the missing image slots"Pretraining 对长程和困难任务很重要.RDT:基于 Diffusion-transformerData scarcity: 目标任务上数量少?考虑在 cross-embodiment 做大量 Pretrain数据集结构不一样: 提出 unified spaceInput: 图片,lang instruction,本体感知,控制频率Image 通过 SIGLIP (frozen)lang: T5XXL [?] (frozen)随机且独立地 mask 某一个多模态的输入,防止过度依赖某一个模态Training recipe:Unified action spacePre-train 巨大数据集自己 finetune 高质量数据集6K 轨迹,300 任务,instruction (GPT4输出以增加多样性),物体和环境多样性效果:zero-shot 到没有见过的任务.few-shot 学会新技能.可以遥控机器狗.模型大小,数据量大小和 Diffusion 都对于 RDT 性能关键.GR-2 字节提出的模型先做大量 text-video pre-training然后再 video-action co-training(下游 finetune)结构:Text: CLIPImage: VQGANbackbone: GPT-styleaction traj: action chunk + CVAE[idea] Video generation as planner!实验证明视频预测和真实执行非常吻合.Takeaways 思考大量 pre-training 然后在高质量数据集上 finetune 可以提升性能.Cross-embodiment 训练可以增强领域迁移能力。VLA 带来世界知识和推理能力action chunking & generative models (better than single step auto-regressive)LimitationImitation Learning 无法超越示教者的表现.Generalization 还是不够. 主要是没有见过的动作和没有见过的具身形态.跨具身形态和训练可以改进. (see HPT 凯明组)Future work如何从人类视频中学习新的 skillPretraining datasets 如何构成.需要什么样的数据,多少数据才能 near-perfect.需要多 diverse.构建很大很高质量的数据集,高效训练方法和数据来源.继续构建 VLA foundation model.考虑使用 simulation data. 目前做的不多.考虑使用强化学习

自注意力

2025-04-27
0425julyfunnotes

自注意力考虑:mole 一词在不同上下文有不同含义.嵌入层将 mole 转换为泛型向量以后,Transformer 的下一层会根据上下文再加一个偏移向量。 image.png|500$E_1^->$ 是词嵌入 $+$ 位置嵌入.$Q_i^-> = W_Q dot E_i^->$ 形象比喻:$E_1^->$ 是第四个单词,且是名词。问在第四个单词前面有形容词不?$K_i^-> = W_k dot E_i^->$ 形象比喻:$E_2^->$ 是第二个单词,形容词。(可以回答上面的询问)上面这张表叫做 Attention Pattern。在从前往后生成文本的任务中,左下角掩码强制置 0,这样前面 Qi 查不到后面 Ki.(在翻译等任务中,则不需要此掩码) image.png|500 image.png|500$V_i^-> = W_v dot E_i^->$ 表示对其他词应该造成什么偏置。比如上图从 creature 到蓝色毛茸茸生物的灰色箭头.这里如果真用 $W_v$ 这个矩阵的话,唯独就爆炸了. 我们先编码再解码,实际上 $V_i^-> = W_(v, "up") dot W_(v, "down") dot E_i^->$PS:$W_q, W_k$ 和两个 $W_v$ 是一样参数量. GPT-3 中是 $128 times 12288$ ($W_(v, "up")$ 为 $12288 times 128$)经过注意力以后的嵌入结果:加起来,如下图。下面 $Delta E_i^->$ 就是一个注意力. image.png|600多头注意力其实就是有 n 组上面这写矩阵,自行学习不同的注意力机制. 比如除了“形容词-名词”修饰,还有可能是“名词推测”、“动作导致形状变化”等注意力机制。GPT-3 中是 96 个头.最后的嵌入结果就是加在一起. image.png|500多层多头注意力每次经过一个多头 Attention 以后会过 MLP,然后再过多头 Attention,重复多层. GPT-3 中是 96 层. image.png|500交叉注意力文本和图像做交叉注意力时,文本 $==>^("CLIP or BERT")$ Embedding。随后计算 KV.图像 $==>^("resnet 等")$ Embedding, 然后计算 Q.这是文本到图像的注意力,即通过文本得到图像中文本对应的内容,并将其给予更高的权重.[AI] PS:Q 来自图像,K/V 来自文本 → 这是一个从图像“查询”文本的过程。注意力权重反映的是“图像需要从文本中获取什么信息”猫区域的 Q 与“cat”的 K 相似度高 → 这些区域的注意力权重较大。最终,来自文本 V 的“猫”语义被注入到图像中猫的区域.以下代码来自: GitHub/RoboTwin/policy/3D-Diffusion-Policy/3D-Diffusion-Policy/diffusion_policy_3d/model/diffusion/conditional_unet1d.py可以看出输入被用来计算 Q,而 condition 被用来计算 K, Qclass CrossAttention(nn.Module): def __init__(self, in_dim, cond_dim, out_dim): super().__init__() self.query_proj = nn.Linear(in_dim, out_dim) self.key_proj = nn.Linear(cond_dim, out_dim) self.value_proj = nn.Linear(cond_dim, out_dim) def forward(self, x, cond): # x: [batch_size, t_act, in_dim] # cond: [batch_size, t_obs, cond_dim] # 下面 horizon 就是 t_act. # Project x and cond to query, key, and value # 注意 nn.Linear 是右乘,即 x @ weights.T # weights 形状为 out_dim * in_dim(和创建时相反) query = self.query_proj(x) # [batch_size, horizon, out_dim] key = self.key_proj(cond) # [batch_size, horizon, out_dim] value = self.value_proj(cond) # [batch_size, horizon, out_dim] # Compute attention attn_weights = torch.matmul(query, key.transpose(-2, -1)) # [batch_size, horizon, horizon] attn_weights = F.softmax(attn_weights, dim=-1) # Apply attention attn_output = torch.matmul(attn_weights, value) # [batch_size, horizon, out_dim] return attn_outputimage.png|500多层多头注意力每次经过一个多头 Attention 以后会过 MLP,然后再过多头 Attention,重复多层

3D-Diffusion-Policy

2025-04-24
0425julyfunnotes

符号T: 预测轨迹长度eval_policy.py 调用 deploy_policy.py:eval(),其调用 RobotRunner.get_action()RobotRunner.get_action() (robot_runner.py)obs = self.get_n_steps_obs()obs <- update_obs() 就是 append <- Base_task.get_obs()[ai]observation - 包含来自各种相机的观察数据相机数据包括 head_camera, left_camera, right_camera, front_camera 等每个相机可以包含以下数据(取决于 data_type 设置):rgb - RGB图像数据mesh_segmentation - 网格分割数据actor_segmentation - 实体分割数据depth - 深度图像数据相机内参和外参矩阵pointcloud - 点云数据如果 data_type['pointcloud'] 为 True,则包含点云数据可以选择是否合并多个相机的点云数据joint_action - 机器人关节状态如果 data_type['qpos'] 为 True,包含机器人关节角度双臂模式下,包含左臂和右臂的关节角度单臂模式下,仅包含右臂的关节角度endpose - 机器人末端执行器姿态如果 data_type['endpose'] 为 True,包含末端执行器的位置和姿态双臂模式下,包含左右两个末端执行器的信息(位置x,y,z,欧拉角roll,pitch,yaw,以及夹爪状态)单臂模式下,仅包含右臂末端执行器信息vision_tactile - 视觉触觉传感器数据(当 TACTILE_ON 为 True 时)如果 data_type['vision_tactile'] 为 True,包含触觉传感器的RGB图像数据随后拿出两个数据并重命名: pointcloud -> point_cloud, joint_action -> agent_pos得到 obs: Dicteach_key => 将最近 n 个观测的 key 在第 0 维度拼接. 形状为 (n_steps, ) + shape_of_the_valuen_steps 在参数 yaml 里为 n_obs_steps = 3在前面 unsqueeze 一个长度为 1 的维度后送进 DP3.predict_action() (应该是因为推理的时候 batch 必是 1)class DP3:predict_action() (dp3.py)Input (obs_dict):'point_cloud': (1, 3, 1024, 6)'agent_pos': (3, 14) 就是关节角度过程:normalizeif global_cond:point_cloud & agent_pos 都送入 DP3Encoder,得到 (3, 192),压扁成 (1, 576)mask 就是全部 mask 掉, 所有动作都需要通过扩散模型生成else:mask 观察特征保持可见送入 self.condition_sapmle()return. 实测表明一次预测 6 步且会把这 6 步执行完,再预测下 6 步.condition_sample():ps:出的 traj shape 是 (B, T, action_dim) = (1, 8, 14)每个去噪步 model(sample=trajectory, timestep=t, local_cond=local_cond(必为 None), global_cond=global_cond)model is ConditionalUnet1D.forward():... timestep (形状 (B, ) or int) encoding (SinusoidalPosEmb, Linear, Mish, Linear) 如 global_cond,则 `global_feature = cat([timestep_embed, global_cond], axis=-1) x = sample (即 trajactory) ... for idx, (resnet, resnet2, downsample) in enumerate(self.down_modules): if self.use_down_condition: x = resnet(x, global_feature) if idx == 0 and len(h_local) > 0: x = x + h_local[0] x = resnet2(x, global_feature) else: x = resnet(x) if idx == 0 and len(h_local) > 0: x = x + h_local[0] x = resnet2(x) h.append(x) x = downsample(x) ... 后面有一个 mid_module (ConditionalResidualBlock1D) ... 后面面 Upsample 一毛一样 x = self.final_conv(x) return x其中 resnet, resnet2, downsample:ConditionalResidualBlock1D( dim_in, dim_out, cond_dim=cond_dim, kernel_size=kernel_size, n_groups=n_groups, condition_type=condition_type), ConditionalResidualBlock1D( dim_out, dim_out, cond_dim=cond_dim, kernel_size=kernel_size, n_groups=n_groups, condition_type=condition_type), Downsample1d(dim_out) if not is_last else nn.Identity()其中 ConditionalResidualBlock1D.forward():out = Conv1dBlock() (x)if cross_attention_addembed = CrossAttention() (x)out = out + embed (是 tensor 值加)out = another Conv1dBlock() (x)out = out + self.residual_conv(x)return outInnerDP3Encoder输入'point_cloud' => B x N x 3的 点云 (B: batch) = (3, 1024, 3) 送入:class PointNetEncoderXYZMLP: [Linear + LayerNorm + ReLU] x 3channels: 3 => 64 => 128 => 256 => max => Linear + LayerNorm (128)forward():(B, N, 3) = (3, 1024, 3)mlp => (3, 1024, 256)max => (3, 256)Linear + LayerNorm => (3, 128)self.state_mlp: 简单的 MLP (Linear + ReLU). state_mlp_size = (64, 64).最后 cat 成 (3, 192)Oute

README

2025-03-21
0325julyfunnotes小程序开发教程

AIAI 开发文字版https://www.ruanyifeng.com/blog/2025/01/tencent-cloud-copilot.html小程序视频教程https://www.bilibili.com/video/BV1834y1676P?spm_id_from=333.788.videopod.episodes&vd_source=1acae9ee50868a5f41c09d12b0b85307&p=4另一个教程看一下: https://pan.baidu.com/s/1crZTQdIZ7OSDkZIpIWkhYw?pwd=1234#list/path=%2Fsharelink3232509500-440120063745026%2F1.%20%E6%89%8B%E6%8A%8A%E6%89%8B%E6%95%99%E4%BD%A0%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F&parentPath=%2Fsharelink3232509500-4401200637450262. HTML基础语法HTML简介什么是HTML?HTML的基本结构常用HTML标签<div>, <span>, <p>, <h1>-<h6>, <a>, <img>, <input>, <button> 等HTML属性id, class, style, src, href 等HTML表单<form>, <input>, <textarea>, <select>, <button> 等3. JavaScript基础语法JS简介什么是JavaScript?JS在微信小程序中的作用变量与数据类型变量声明:var, let, const数据类型:Number, String, Boolean, Array, Object, null, undefined运算符算术运算符、比较运算符、逻辑运算符控制结构if 语句、switch 语句、for 循环、while 循环函数函数声明与调用参数与返回值事件处理什么是事件?常见事件:onClick, onLoad, onShow 等4. 微信开发者工具介绍下载与安装下载微信开发者工具安装与配置界面介绍项目结构编辑器、调试器、模拟器创建第一个小程序项目新建项目项目目录结构介绍代码编辑与调试编写HTML和JS代码实时预览与调试5. 实战练习创建一个简单的页面使用HTML和JS创建一个简单的页面添加按钮并绑定点击事件调试与运行在微信开发者工具中调试代码查看效果并修改代码6. 总结与答疑回顾今天学习的内容解答学员疑问布置课后作业:创建一个包含表单的页面,并实现简单的交互功能7. 课后作业创建一个包含以下元素的小程序页面:标题输入框按钮点击按钮后,显示输入框中的内容8. 参考资料微信小程序官方文档MDN Web Docs - HTML[MDN Web Docs - JavaScript](https://developer.mozilla.org/z

听力快速过词汇

2025-03-15
0325julyfunnotes

1.Mettre en lien les compétences des uns et les besoins des autres, en Allemagne, l'université de Potsdam donne aux réfugiés qui ont été enseignants dans leur pays d'origine la possibilité de devenir assistants puis professeurs dans les écoles allemandes qui manquent d'enseignants. Ce projet pilote intitulé Refugees Teacher Welcome fonctionne déjà. Reportage à Potsdam de Débora Berlioz.Le soleil brille ce matin sur l'école primaire Goethe à Potsdam, près de Berlin. Dans une classe de CE2, le cours de mathématiques est sur le point de commencer. Je viens de Syrie. J'étais professeure de mathématiques dans mon pays. J'ai étudié les mathématiques et j'ai travaillé pendant six ans comme enseignante. Mais celle qui dirige le cours n'a pas le profil type des enseignants allemands. Alésaar vit en République fédérale depuis deux ans seulement.Avant de rejoindre l'école Goethe, Alésar a suivi un programme à l'université de Potsdam destiné aux enseignants réfugiés. C'est Myriam Vock qui a eu l'idée de ce projet à l'été 2015, au plus fort de la crise des réfugiés. Cette professeure à la faculté se doutait bien que de nombreux enseignants se trouvaient parmi les nouveaux arrivants. Autant faire profiter l'Allemagne de leurs compétences, a-t-elle pensé. Surtout que la région manque cruellement d'enseignants. L'université de Potsdam a tout de suite soutenu son idée.Nous pensions commencer avec un groupe de dix personnes, mais nous avons reçu presque 700 candidatures. Il y avait un besoin énorme pour cette formation et nous nous sommes dit qu'avec un peu d'aide, nous pourrions offrir plus de place. Heureusement, le ministère de l'Éducation du Brandenbourg nous a rapidement donné les moyens et nous avons pu commencer avec trois groupes d'élèves.Depuis 2016, 80 réfugiés ont pu intégrer la formation. Pendant trois semestres, ils suivent des cours intensifs d'allemand ainsi que des séminaires de pédagogie. Ils effectuent également un stage dans une école afin de se familiariser au maximum avec le système scolaire allemand. Au début, Alézar a eu quelques surprises. Les méthodes d'éducation ne sont pas tout à fait les mêmes en Syrie.Il y a plus de liberté ici et je trouve cela très bien. Cela aide les enfants à construire leur personnalité. Chez nous, il n'y avait pas autant de liberté. Les élèves étaient plus disciplinés, mais je pense que la liberté est plus importante.Au terme de leur formation, les réfugiés obtiennent un contrat d'un an en tant que professeurs assistants. Ils travaillent à temps plein et leur salaire est d'environ 1700 à 1900 euros net. 13 élèves de la première promotion travaillent déjà dans des écoles de la région. Myriam Vock n'a eu aucun mal à trouver des débouchés pour ses enseignants.Les écoles étaient très intéressées par ces professeurs assistants. D'abord parce qu'elles pâtissent d'un manque de personnel. De plus, elles ont des élèves réfugiés. Elles doivent travailler avec leurs parents et cela leur pose beaucoup de difficultés. Donc les écoles sont contentes d'avoir quelqu'un qui puisse les aider. Dans son école, Aléza rapporte son soutien à trois enfants syriens. Pour ses élèves, la jeune femme est une interlocutrice idéale et pas seulement parce qu'ils parlent la même langue.nous avons fait les mêmes expériences, nous avons vécu la guerre en syrie, la fuite, et nous avons rencontré les mêmes difficultés à notre arrivée en allemagne, donc je les comprends bien. toutefois, alésa travaille principalement avec des enfants allemands, elle leur donne des cours de mathématiques et parfois elle leur parle de son histoire.ils ont toujours beaucoup de questions. ils me demandent si j'ai déjà vu un char, si j'ai vu cela. et maintenant ils connaissent aussi leur nom en arabe et ils peuvent l'écrire. après son contrat d'un an, alézar aimerait devenir enseignante à part entière, mais ce n'est pas facile en allemagne car il faut avoir étudié deux matières pour obtenir le diplôme d'etat. or alézar n'a suivi qu'un cursus de mathématiques.si elle fait ses preuves, elle peut cependant être embauchée comme enseignante non titulaire. elle n'aura pas le statut de fonctionnaire et aura une paie inférieure à celle d'un titulaire, mais elle pourra continuer de se former en vue de passer le diplôme d'etat. hassan, étudiant dans le programme, a une autre solution. selon lui, les réfugiés devraient pouvoir donner des cours d'arabe en plus de leur matière principale, mais à berlin, cette langue n'est pas au programme.c'est un peu injuste. je pense que les enfants réfugiés ont le droit de maîtriser, d'apprendre leur langue maternelle. quand ils seront grands, s'ils veulent retourner dans leur pays pour le soutenir et le reconstruire, ils s'y sentiront comme des étrangers.le projet de l'université de potsdam, modèle souvent cité pour l'intégration des réfugiés, a déjà fait des émules. un programme similaire a ouvert à la faculté de bielefeld. or l'allemagne a besoin de ces nouveaux professeurs. a la rentrée 2017, plus de 3300 postes d'enseignants étaient vacants dans le pays.18:50 Mettre en lien(建立联系) les compétences(能力) des uns et les besoins(需求) des autres, en Allemagne, l'université de Potsdam(波茨坦大学) donne aux ==réfugiés==(难民) ☆qui ont été enseignants(教师) dans leur pays d'origine(原籍国) la possibilité(可能性) de devenir assistants(助手,助教) puis professeurs(教授,教师) dans les écoles allemandes(德国的学校) qui manquent d'enseignants(缺少教师). 将一些人的能力和另一些人的需求建立联系,在德国,波茨坦大学为难民中那些在原籍国曾是教师的人提供了成为助教然后在缺少教师的德国学校里当教师的可能性。 Ce projet @pilote(试点项目) @intitulé(名为) @Refugees Teacher Welcome fonctionne déjà(已经运行). @Reportage(报道) à Potsdam de Débora Berlioz. 这个名为“欢迎难民教师”的试点项目已经在运行了。德博拉·贝略在波茨坦的报道。 Le soleil(太阳) ==brille==(照耀) ce matin(今天早上) sur l'école primaire(小学) Goethe à Potsdam, près de Berlin. 今天早上,太阳照耀着柏林附近波茨坦的歌德小学。 Dans une classe de CE2(小学二年级), le cours de mathématiques(数学课) est ==sur le point de commencer==(即将开始). 在一个小学二年级的班级里,数学课即将开始。 Je viens de Syrie(叙利亚). J'étais professeure de mathématiques(数学教师) dans mon pays. J'ai étudié les mathématiques(学习数学) et j'ai travaillé pendant six ans(六年) comme enseignante(作为教师). 我来自叙利亚。我在我的国家曾是一名数学教师。我学过数学并且作为教师工作了六年。 Mais celle qui ==dirige== le cours(授课,主持课程) n'a pas le ==profil type==(典型形象,典型特征) des enseignants ==allemands==. ==Alésaar== ==vit en== ==République== ==fédérale==(联邦共和国,这里指德国) depuis deux ans seulement. 但是授课的那个人没有典型的德国教师的特征。阿莱萨尔仅仅在德国生活了两年。 Avant de ==rejoindre== l'école Goethe, Alésar ==a suivi un== programme(参加一个项目) à l'université de Potsdam ==destiné aux== enseignants réfugiés(为难民教师准备的). 在加入歌德小学之前,阿莱萨尔参加了波茨坦大学一个为难民教师准备的项目。 C'est Myriam Vock qui a eu l'idée(有了这个想法) de ce projet à l'==été== ==2015==, au plus fort de la ==crise== des réfugiés(在难民危机最严重的时候). 是米里亚姆·沃克在 2015 年夏天,在难民危机最严重的时候有了这个项目的想法。 Cette professeure(教师) à la ==faculté==(学院里的) se ==doutait== bien(很清楚) que de nombreux enseignants ==se trouvaient ==parmi les nouveaux arrivants(新到者). 这位学院里的教师很清楚在新到的人中有很多教师。 ==Autant== faire profiter l'Allemagne(让德国受益) de leurs compétences(他们的能力), ==a-t-elle pensé==. 她想,不妨让德国从他们的能力中受益。 Surtout que(尤其是) la région(地区) manque ==cruellement==(极其缺乏) d'enseignants. 尤其是这个地区极其缺乏教师。 L'université de Potsdam a tout de suite ==soutenu==(立即支持) son idée. 波茨坦大学立即支持了她的想法。20:10 Nous ==pensions==(我们曾以为) commencer avec un groupe de dix personnes, mais nous avons ==reçu== presque ==700== ==candidatures==(申请). 我们曾以为会从一个十人的小组开始,但我们收到了将近 700 份申请。 Il y avait un besoin ==énorme==(巨大的需求) pour cette ==formation==(培训) et nous ==nous sommes dit==(我们对自己说,我们认为) qu'avec un ==peu d'aide==(一点帮助), nous pourrions ==offrir== plus de place(提供更多的名额). 对于这个培训有着巨大的需求,我们认为如果有一点帮助的话,我们能够提供更多的名额。 Heureusement(幸运地), le ==ministère== de l'Éducation(教育部) du Brandenbourg(勃兰登堡州) ==nous a== @rapidement donné les ==moyens==(迅速地给予了我们资源) et nous avons @pu commencer avec ==trois groupes d'élèves==(三个学生小组). 幸运的是,勃兰登堡州教育部迅速地给予了我们资源,我们得以从三个学生小组开始。 Depuis @2016, 80 réfugiés ont @pu ==intégrer== la formation(参加培训). 自 2016 年以来,80 名难民得以参加这个培训。 Pendant trois ==semestres==(三个学期), ils suivent des cours @==intensifs==(强化课程) d'allemand ainsi que des @==séminaires==(研讨会) de pédagogie(教育学). 在三个学期里,他们上德语强化课程以及教育学研讨会。 Ils @effectuent également(也进行) un ==stage==(实习) dans une école afin de se familiariser au maximum(尽可能熟悉) avec le système scolaire(教育系统) ==allemand==. 他们也在一所学校进行实习,以便尽可能熟悉德国的教育系统。 Au début(一开始), ==Alézar== a eu quelques surprises(感到有些意外). Les méthodes d'éducation(教育方法) ne sont pas tout à fait(不完全) les mêmes en Syrie. 一开始,阿莱扎感到有些意外。在叙利亚的教育方法和这里不完全一样。 Il y a plus de liberté(更多自由) ici et je trouve cela très bien(我觉得这很好). Cela ==aide== les enfants à construire leur personnalité(塑造他们的个性). 这里有更多的自由,我觉得这很好。这有助于孩子们塑造他们的个性。 ==Chez nous==(在我们那儿,在叙利亚), il n'y avait pas ==autant== de liberté(没有这么多自由). Les élèves étaient plus disciplinés(更守纪律), mais je pense que la liberté est plus importante(更重要). 在我们那儿,没有这么多自由。学生们更守纪律,但我认为自由更重要。 ==Au terme de==(在……结束时) leur formation, les réfugiés @obtiennent un @==contrat==(获得一份合同) d'un ==an== en tant que(作为) professeurs assistants(助理教师). 在培训结束时,难民们获得一份为期一年的助理教师合同。 Ils travaillent ==à temps plein==(全职工作) et leur salaire(工资) est d'environ 1700 à 1900 euros ==net==(净收入). 他们全职工作,他们的净收入大约在 1700 到 1900 欧元之间。 ==13== élèves de la première ==promotion==(首批学员) @travaillent déjà dans des écoles de la région. 首批的 13 名学员已经在该地区的学校里工作了。 Myriam Vock ==n'a eu== @aucun mal(没有遇到任何困难) à trouver des @==débouchés==(找到出路,找到工作机会) pour ses enseignants. 米里亚姆·沃克为她的这些教师学员找到工作机会没有遇到任何困难。 Les écoles étaient très intéressées(很感兴趣) ==par== ces professeurs assistants. 学校对这些助理教师非常感兴趣。 D'abord parce qu'elles ==pâtissent== d'un manque de personnel(人员短缺). 首先是因为它们饱受人员短缺之苦。 De plus(此外), elles ont des élèves réfugiés(难民学生). @Elles doivent travailler avec leurs parents(和他们的家长合作) et cela leur ==pose== beaucoup de difficultés(给他们带来很多困难). 此外,它们有难民学生。学校必须和这些学生的家长合作,而这给他们带来很多困难。 Donc les écoles sont contentes d'avoir ==quelqu'un== qui ==puisse== les aider(有能帮助他们的人). 所以学校很高兴能有可以帮助他们的人。 Dans son école, Aléza ==rapporte== son ==soutien==(提供她的帮助) à trois enfants syriens. 在她的学校里,阿莱扎为三个叙利亚孩子提供帮助。 Pour ses élèves, la jeune femme est une @==interlocutrice== idéale(理想的交谈对象) et ==pas @seulement parce== qu'ils parlent la même langue(说同一种语言). 对于她的学生们来说,这位年轻女性是一个理想的交谈对象,而且不仅仅是因为他们说同一种语言。21:55 nous avons fait les mêmes expériences(我们有过相同的经历), nous avons ==vécu== la ==guerre==(经历战争) en syrie, la ==fuite==(逃亡), et nous avons rencontré les mêmes difficultés(遇到相同的困难) à notre ==arrivée==(到达时) en allemagne, donc je les comprends bien(所以我很理解他们). 我们有过相同的经历,我们在叙利亚经历了战争、逃亡,并且在到达德国时遇到了相同的困难,所以我很理解他们。 toutefois(然而), ==alésa== ==travaille== principalement(主要地) avec des enfants allemands, elle leur ==donne== des cours(授课) de mathématiques et ==parfois== elle leur parle de son histoire(讲述她的经历). 然而,阿莱萨主要和德国孩子一起学习,她给他们上数学课,并且有时她会给他们讲述她的经历。 ils ont toujours beaucoup de questions(他们总是有很多问题). ils me demandent si j'ai déjà vu un ==char==(坦克), si j'ai vu cela. 他们总是有很多问题。他们问我是否见过坦克,是否见过那个。 et maintenant ils connaissent aussi leur nom en ==arabe==(用阿拉伯语) et ils peuvent l'écrire(书写它). 并且现在他们也知道了自己名字的阿拉伯语写法,而且他们能写出来。 après son ==contrat==(合同) ==d'un an==, alézar ==aimerait== devenir enseignante ==à part entière==(正式教师), mais ce n'est pas facile en allemagne car il faut avoir ==étudié== deux ==matières==(两门学科) pour obtenir le diplôme d'etat(国家教师资格证书). 在她一年的合同结束后,阿莱扎想要成为一名正式教师,但在德国这并不容易,因为要获得国家教师资格证书必须学习过两门学科。 or alézar ==n'a suivi qu'un== ==cursus==(课程) de mathématiques. 然而阿莱扎只学过数学课程。 si elle fait ses ==preuves==(如果她证明自己的能力), elle peut cependant être ==embauchée==(被雇佣) comme enseignante non ==titulaire==(非有正式资格的教师). 如果她证明自己的能力,然而她可以被雇佣为一名非有正式资格的教师。 elle ==n'aura pas ==le ==statut==(身份,地位) de ==fonctionnaire==(公务员,公职人员) et aura une ==paie==(工资) inférieure(更低的) à celle d'un titulaire(有正式资格的人), mais elle pourra continuer de se former(继续培训) ==en vue de==(为了) passer le diplôme d'==etat==. 她不会有公职人员的身份,并且工资会比有正式资格的教师低,但她可以为了获得国家教师资格证书继续参加培训。 ==hassan==, étudiant dans le programme(该项目的学生), ==a== une autre solution(另一个解决办法). 哈桑,该项目的学生,有另一个解决办法。 selon lui(据他所说), les réfugiés devraient pouvoir ==donner== des cours(授课) d'==arabe== ==en plus de==(除了……之外) leur matière principale(主修科目), mais à berlin, cette langue n'est pas au programme(在课程安排里). 据他所说,难民们除了他们的主修科目之外应该能够教授阿拉伯语课程,但在柏林,这门语言不在课程安排里。 c'est un peu injuste(有点不公平). je pense que les enfants réfugiés ont le droit(有权利) de maîtriser(掌握), d'apprendre leur langue maternelle(母语). 这有点不公平。我认为难民孩子有权利掌握、学习他们的母语。 quand ils seront grands(当他们长大后), s'ils veulent retourner dans leur pays(回到他们的国家) pour le soutenir(支持它) et le reconstruire(重建它), ils s'y sentiront comme des étrangers(感觉自己像陌生人). 当他们长大后,如果他们想要回到自己的国家去支持和重建它,他们会在那里感觉自己像陌生人。 le projet de l'université de potsdam, modèle souvent cité(常被引用的模式) pour l'intégration(融入) des réfugiés, a déjà fait des émules(已有模仿者). 波茨坦大学的这个项目,常被引用为难民融入的模式,已经有了模仿者。 un programme similaire(类似的项目) a ouvert à la faculté de bielefeld. 一个类似的项目已经在比勒费尔德大学学院开设了。 or l'allemagne a besoin de(需要) ces nouveaux professeurs. 然而德国需要这些新教师。 à la rentrée(开学时) 2017, plus de 3300 postes d'enseignants(教师职位) étaient vacants(空缺的) dans le pays. 在 2017 年开学时,德国国内有超过 3300 个教师职位空缺。2.Quoi ressemble la vie d'un digital nomade ? Écoutez le témoignage de Marianne Rigaud, elle a 33 ans, elle est journaliste indépendante, elle est aussi responsable pédagogique dans un organisme de formation continue, a priori un job très classique, et elle a travaillé pendant un mois parmi la communauté des digital nomades à Bali en Indonésie. Raphaël Constant l'a rencontré à son retour à Paris dans la grisaille.C'est un projet que j'ai développé en écoutant un podcast sur les travailleurs du numérique qui voyagent et travaillent en même temps. J'ai donc proposé à mon chef de faire ça pendant un mois.Il a vite compris que j'avais besoin d'expérimenter ça et il a dit ok. En fait le plus dur dans l'histoire ça a été de trouver où je voulais partir. L'Afrique du Sud, la Scandinavie, Lisbonne qui est une destination qui monte en Europe sur le numérique. Ce qui exige donc quand même de trouver des villes assez connectées. Voilà, l'impératif c'était d'avoir une bonne connexion internet déjà.Et finalement, en cherchant des infos sur les destinations prisées chez les digital nomades, Bali revenait en tête de tous les classements. Il y a une très bonne connexion internet, il y a des bons coworking qui sont ouverts 24h sur 24. Les espaces de coworking, c'est des espaces où on peut venir travailler en payant une sorte d'abonnement à la journée ou à la semaine ou au mois.Tout à fait, on s'installe dans son ordinateur avec d'autres personnes qui sont aussi en train de travailler. On peut aussi travailler dans un café Wi-Fi, évidemment. Souvent, il y a même une piscine. Et ça, c'est génial parce qu'au lieu de faire une pause cigarette, par exemple, on fait une pause plongeon dans la piscine. Peu importe la destination. Moi, le principe, c'était de pouvoir partir avec mon ordinateur, de faire mon travail comme d'habitude, mais loin et en télétravail.Et justement, qu'est-ce qui est attirant dans le fait de travailler hors les murs, tout en voyageant ? D'être dépaysée, être dans un autre hémisphère, être sur un autre fuseau horaire, être loin de Paris, travailler de la même façon que d'habitude, avec la même implication, avec la même intensité, mais avec 30 degrés, la mer à côté, pieds nus.Ce qui m'intéresse moi c'est pas tant me couper des autres, je demande juste à pouvoir profiter de la souplesse qu'offre mon travail pour pouvoir m'affranchir des horaires, du bureau, pendant un mois de pouvoir se déconnecter de tout ce qui peut peser quand on est à Paris, quand on est dans son quotidien.Et c'est s'extraire de tout ça, prendre du temps pour soi, pour repenser son rapport au travail et finalement pouvoir sortir de sa zone de confort tout en faisant son travail comme d'habitude. Et comment vous vous êtes organisée ? Dans l'entreprise où je travaille, on a déjà l'habitude de faire du télétravail. Donc les outils pour travailler à distance sont déjà en place.Donc, au niveau de l'organisation, ça n'a pas changé grand chose. Parfois, je fais déjà du télétravail de chez moi. Il y a un point sur lequel ça a changé quelque chose, ce sont les horaires, puisqu'il y a 7 heures de décalage horaire entre Bali et la France. Au départ, j'ai travaillé de 15h à minuit, dans les heures locales de Bali, ce qui correspond en France à 8h-17h à peu près.Donc en fait, les clients avec qui on travaille ne voyaient pas la différence. Ils pouvaient me joindre par téléphone, par mail, par WhatsApp. Et le matin, je profitais, j'allais à la plage, faire du yoga, faire du surf, me balader, lire, profiter de la guest house où je dormais. Est-ce qu'on se sent pas un peu seule quand on travaille loin du bureau ?Il y a quelques moments où je me suis sentie seule, notamment à cause du décalage horaire. C'est-à-dire que moi je commençais ma journée un peu avant que l'équipe arrive au bureau. Parfois j'avais envie de partager des soucis et si c'était un horaire auquel l'équipe n'était pas en ligne, là oui j'étais un petit peu toute seule.Par contre, j'ai rencontré vraiment plein de personnes travaillant dans le digital, des personnes qui ont créé une start-up, une entreprise, des Français, beaucoup, des Australiens, des Américains, des Russes. Même si on ne rentre pas en profondeur dans les dossiers qu'on traite, ça permet de se mettre tous sur la même table avec un ordinateur, un jus de fruits frais, de partager un temps de travail tous ensemble.et la concentration étant meilleure, on va plus vite sur les tâches, on va plus vite à l'essentiel, on devient très vite beaucoup plus productif. Quand vous avez parlé de votre projet à votre entourage, comment ça a été reçu ? Tout mon entourage a été très content pour moi, trouvait ça très cohérent. J'ai toujours beaucoup voyagé à l'étranger, seule. J'ai eu quand même quelques petites remarques de jalousie.T'en as de la chance ? Non, c'est pas de la chance, c'est un choix que je fais et qui est certes permis par mon métier, mais c'est un choix que j'ai fait de partir un mois dans un pays où je ne connaissais personne, où personne ne m'attendait, donc j'arrivais toute seule et puis je me suis débrouillée pendant un mois pour me loger, me déplacer et travailler.Beaucoup de gens n'ont pas vraiment compris. Est-ce que c'était des vacances déguisées ? Est-ce que j'allais réussir à travailler ? Ça, c'était une grande question. Oui, on peut travailler quand on est à Bali, et au contraire, je trouve qu'on travaille même mieux. Les Anglais ont une formule « work hard, play hard », donc travailler dur, mais profiter grandement. Bali incarne vraiment cette formule, c'est-à-dire que certes, on travaille comme on le ferait à Paris, sauf que le reste du temps,profiter à la hauteur de ce qu'on a travaillé.Quoi ressemble la vie d'un digital nomade(数字游民的生活是什么样的)? Écoutez le témoignage(听听证词,这里指讲述) de Marianne Rigaud, elle a 33 ans, elle est journaliste indépendante(独立记者), elle est aussi responsable pédagogique(教学负责人) dans un organisme de formation continue(继续教育机构), a priori(从表面上看,先验地) un job très classique(非常传统的工作), et elle a travaillé pendant un mois parmi la communauté des digital nomades(数字游民群体) à Bali en Indonésie(印度尼西亚的巴厘岛). Raphaël Constant l'a rencontré à son retour à Paris dans la grisaille(在灰暗的环境中,这里可理解为回到巴黎后那种平淡的氛围). 数字游民的生活是什么样的呢?来听听玛丽安·里戈的讲述,她 33 岁,是一名独立记者,同时也是一家继续教育机构的教学负责人,从表面上看这是一份非常传统的工作,而且她曾在印度尼西亚巴厘岛的数字游民群体中工作了一个月。拉斐尔·康斯坦在她回到巴黎后那种平淡的氛围中与她见了面。 C'est un projet que j'ai développé(开展,策划) en écoutant un podcast(播客) sur les travailleurs du numérique(数字领域工作者) qui voyagent et travaillent en même temps(同时旅行和工作). J'ai donc proposé à mon chef(向我的上司提议) de faire ça pendant un mois. 这是我在听了一个关于那些同时旅行和工作的数字领域工作者的播客后策划的一个项目。所以我向上司提议这样做一个月。 Il a vite compris que j'avais besoin d'expérimenter(体验,尝试) ça et il a dit ok. En fait le plus dur dans l'histoire(在这件事情中) ça a été de trouver où je voulais partir(找到我想去的地方). L'Afrique du Sud(南非), la Scandinavie(斯堪的纳维亚), Lisbonne qui est une destination qui monte(热门起来,兴起) en Europe sur le numérique. Ce qui exige donc quand même(仍然,还是) de trouver des villes assez connectées(网络连接较好的城市). Voilà, l'impératif(必要条件) c'était d'avoir une bonne connexion internet(良好的网络连接) déjà. 他很快就理解了我需要去尝试这件事,然后他同意了。实际上在这件事情中最困难的是找到我想去的地方。南非、斯堪的纳维亚、在欧洲数字领域方面正热门起来的里斯本。所以这还是需要找到网络连接较好的城市。就是这样,首要条件就是得有良好的网络连接。 Et finalement, en cherchant des infos sur les destinations prisées(受欢迎的目的地) chez les digital nomades, Bali revenait en tête de tous les classements(在所有排名中都位居榜首). Il y a une très bonne connexion internet, il y a des bons coworking(共享办公空间) qui sont ouverts 24h sur 24(一天 24 小时开放). Les espaces de coworking, c'est des espaces où on peut venir travailler en payant une sorte d'abonnement(支付某种会员费,订阅费,这里指场地使用费) à la journée(按天) ou à la semaine(按周) ou au mois(按月). 最后,在查找关于数字游民受欢迎的目的地的信息时,巴厘岛在所有排名中都位居榜首。那里有非常好的网络连接,还有很好的共享办公空间,这些空间一天 24 小时开放。共享办公空间就是人们可以支付按天、按周或按月的某种场地使用费后去工作的地方。 Tout à fait(完全正确,确实如此), on s'installe(安顿下来,就座) dans son ordinateur(用自己的电脑) avec d'autres personnes qui sont aussi en train de travailler(也在工作). On peut aussi travailler dans un café Wi-Fi(有无线网络的咖啡馆), évidemment. Souvent, il y a même une piscine(游泳池). Et ça, c'est génial(太棒了) parce qu'au lieu de faire une pause cigarette(抽根烟休息一下), par exemple, on fait une pause plongeon(跳水休息一下) dans la piscine. Peu importe la destination(目的地不重要). Moi, le principe(原则,理念), c'était de pouvoir partir avec mon ordinateur, de faire mon travail comme d'habitude(像往常一样工作), mais loin(在远方) et en télétravail(远程办公). 确实如此,人们用自己的电脑和其他也在工作的人一起就座工作。当然,人们也可以在有无线网络的咖啡馆里工作。通常,甚至还有游泳池。这太棒了,因为比如说,人们不是抽根烟休息一下,而是跳进游泳池里休息一下。目的地不重要。对我来说,理念就是能够带着我的电脑出发,像往常一样工作,但却是在远方并且远程办公。Et justement, qu'est-ce qui est attirant(有吸引力的) dans le fait de travailler hors les murs(在办公室之外工作), tout en voyageant(同时旅行)? D'être dépaysée(身处异国他乡,有陌生感), être dans un autre hémisphère(半球), être sur un autre fuseau horaire(时区), être loin de Paris, travailler de la même façon que d'habitude(像往常一样工作), avec la même implication(投入), avec la même intensité(强度), mais avec 30 degrés(30 度), la mer à côté(大海在旁边), pieds nus(赤着脚). 确切地说,在旅行的同时在办公室之外工作,这其中有什么有吸引力的地方呢?是身处异国他乡,在另一个半球,在另一个时区,远离巴黎,像往常一样工作,有着同样的投入,同样的工作强度,但却是在 30 度的环境下,大海就在旁边,赤着脚。 Ce qui m'intéresse moi c'est pas tant me couper des autres(与他人隔绝), je demande juste à pouvoir profiter de la souplesse(灵活性) qu'offre mon travail pour pouvoir m'affranchir des horaires(摆脱工作时间限制), du bureau, pendant un mois de pouvoir se déconnecter de tout ce qui peut peser(有压力的事情) quand on est à Paris, quand on est dans son quotidien(日常生活). 我感兴趣的倒不是与他人隔绝,我只是希望能够利用我工作所提供的灵活性,从而能够摆脱工作时间和办公室的限制,在一个月的时间里能够摆脱当我们在巴黎、在日常生活中可能会感到有压力的一切事情。 Et c'est s'extraire de tout ça(摆脱这一切), prendre du temps pour soi(为自己花些时间), pour repenser son rapport au travail(重新思考自己与工作的关系) et finalement pouvoir sortir de sa zone de confort(走出舒适区) tout en faisant son travail comme d'habitude. 也就是摆脱这一切,为自己花些时间,重新思考自己与工作的关系,最终能够在像往常一样工作的同时走出自己的舒适区。 Et comment vous vous êtes organisée(您是如何安排的)? Dans l'entreprise où je travaille, on a déjà l'habitude de faire du télétravail(远程办公). Donc les outils pour travailler à distance(远程工作的工具) sont déjà en place(已经具备). 那您是如何安排的呢?在我工作的公司,我们已经习惯了远程办公。所以远程工作的工具已经具备了。 Donc, au niveau de l'organisation(在组织安排方面), ça n'a pas changé grand chose(没有太大变化). Parfois, je fais déjà du télétravail de chez moi. Il y a un point sur lequel ça a changé quelque chose, ce sont les horaires(时间安排), puisqu'il y a 7 heures de décalage horaire(时差) entre Bali et la France. 所以,在组织安排方面,没有太大变化。有时候,我已经会在家远程办公。有一点是发生了变化的,那就是时间安排,因为巴厘岛和法国之间有 7 个小时的时差。 Au départ(一开始), j'ai travaillé de 15h à minuit, dans les heures locales de Bali, ce qui correspond en France à 8h-17h à peu près. 一开始,我在巴厘岛当地时间的下午 3 点到午夜工作,这差不多相当于法国时间的早上 8 点到下午 5 点。 Donc en fait, les clients avec qui on travaille ne voyaient pas la différence(没有察觉到不同). Ils pouvaient me joindre par téléphone, par mail, par WhatsApp. Et le matin, je profitais(利用时间,享受时光), j'allais à la plage(去海滩), faire du yoga(做瑜伽), faire du surf(冲浪), me balader(散步), lire(阅读), profiter de la guest house(民宿) où je dormais. 所以实际上,和我们合作的客户并没有察觉到不同。他们可以通过电话、邮件、WhatsApp 和我联系。而早上的时候,我会利用时间,去海滩、做瑜伽、冲浪、散步、阅读,享受我住的民宿。 Est-ce qu'on se sent pas un peu seule(感到有点孤单) quand on travaille loin du bureau? 当在远离办公室的地方工作时,不会感到有点孤单吗?Il y a quelques moments où je me suis sentie seule(我感到孤单), notamment(特别是) à cause du décalage horaire(时差). C'est-à-dire que moi je commençais ma journée un peu avant que l'équipe arrive au bureau. 有那么一些时候我感到孤单,特别是因为有时差。也就是说,在我的团队到办公室之前我就已经开始了我的一天。 Parfois j'avais envie de partager des soucis(分享烦恼) et si c'était un horaire auquel l'équipe n'était pas en ligne(不在线), là oui j'étais un petit peu toute seule. 有时候我想要分享一些烦恼,而如果在那个时间我的团队不在线的话,那时我确实会有点孤单。 Par contre(另一方面), j'ai rencontré vraiment plein de personnes travaillant dans le digital(在数字领域工作), des personnes qui ont créé une start-up(初创企业), une entreprise(企业), des Français, beaucoup, des Australiens, des Américains, des Russes. 另一方面,我真的遇到了很多在数字领域工作的人,一些创办了初创企业、公司的人,很多法国人,还有澳大利亚人、美国人、俄罗斯人。 Même si on ne rentre pas en profondeur dans les dossiers qu'on traite(深入处理手头的事务), ça permet de se mettre tous sur la même table(大家聚在一起) avec un ordinateur, un jus de fruits frais(新鲜果汁), de partager un temps de travail tous ensemble(一起度过工作时光). 即使我们没有深入处理手头的事务,这也能让大家带着电脑、拿着一杯新鲜果汁聚在一起,一起度过工作时光。 et la concentration étant meilleure(注意力更集中), on va plus vite sur les tâches(完成任务更快), on va plus vite à l'essentiel(更快抓住重点), on devient très vite beaucoup plus productif(更高效). 而且因为注意力更集中,我们完成任务更快,更快抓住重点,很快就变得高效很多。 Quand vous avez parlé de votre projet à votre entourage(周围的人), comment ça a été reçu(被接受,被看待)? Tout mon entourage a été très content pour moi, trouvait ça très cohérent(合理的). 当您和您周围的人说起您的这个项目时,他们是怎么看待的呢?我周围的人都为我感到很高兴,觉得这很合理。 J'ai toujours beaucoup voyagé à l'étranger, seule. J'ai eu quand même quelques petites remarques de jalousie(嫉妒的言论). 我一直经常独自出国旅行。尽管如此,我还是听到了一些嫉妒的言论。 T'en as de la chance(你真幸运)? Non, c'est pas de la chance, c'est un choix que je fais(我做的一个选择) et qui est certes permis par mon métier(我的职业允许的), mais c'est un choix que j'ai fait de partir un mois dans un pays où je ne connaissais personne(不认识任何人), où personne ne m'attendait(没人等我), donc j'arrivais toute seule(独自到达) et puis je me suis débrouillée(设法应对,解决问题) pendant un mois pour me loger(找地方住), me déplacer(出行) et travailler. 你真幸运?不,这不是运气,这是我做的一个选择,当然也是我的职业所允许的,但这是我做出的一个选择,去一个我不认识任何人、没人等我的国家待一个月,所以我独自到达,然后在一个月的时间里我设法解决找地方住、出行和工作的问题。 Beaucoup de gens n'ont pas vraiment compris. Est-ce que c'était des vacances déguisées(伪装的假期)? Est-ce que j'allais réussir à travailler(成功工作)? Ça, c'était une grande question. 很多人并没有真正理解。这是不是伪装的假期呢?我能不能成功地工作呢?这是个大问题。 Oui, on peut travailler quand on est à Bali, et au contraire(相反), je trouve qu'on travaille même mieux. Les Anglais ont une formule(说法) « work hard, play hard », donc travailler dur(努力工作), mais profiter grandement(尽情享受). 是的,在巴厘岛是可以工作的,而且相反,我觉得我们甚至能工作得更好。英国人有个说法“努力工作,尽情玩乐”,所以努力工作,但也要尽情享受。 Bali incarne vraiment cette formule(体现了这种理念), c'est-à-dire que certes, on travaille comme on le ferait à Paris, sauf que le reste du temps, profiter à la hauteur de ce qu'on a travaillé(与工作的付出相匹配地享受生活). 巴厘岛真正体现了这种理念,也就是说,当然,我们像在巴黎那样工作,只不过在其余的时间里,与我们工作的付出相匹配地享受生活

口语范文-AI

2025-03-14
0325julyfunnotes

种族平等Bonjour, le sujet que j'ai choisi aujourd'hui est la représentation des minorités visibles dans les médias.La télévision, les débats et les séries restent des espaces où les minorités visibles sont trop souvent invisibles, malgré les appels à la diversité. Cette situation présente des enjeux majeurs, avec des avantages et des inconvénients à considérer. Dans cette présentation, je vais d'abord vous montrer les avantages d'une meilleure représentation, puis les inconvénients de la sous - représentation, et enfin partager mon point de vue personnel avant de conclure.Commençons par les avantages.Tout d'abord, une meilleure représentation des minorités visibles permet de promouvoir l'inclusion sociale.Cela montre aux jeunes des minorités qu'ils ont leur place dans la société et peut stimuler leur confiance en eux - mêmes. De plus, cela permet à la société dans son ensemble de mieux comprendre et apprécier la diversité culturelle.Ensuite, une représentation plus équitable dans les médias peut offrir des modèles positifs.Les héros et les personnalités des minorités visibles peuvent inspirer les générations futures et contribuer à briser les stéréotypes.Enfin, cela peut ouvrir des opportunités économiques pour les membres des minorités.Plus de rôles et de postes dans les médias signifient plus de chances de gagner une vie honorable dans ces secteurs.Passons maintenant aux inconvénients de la sous - représentation.Tout d'abord, il y a le problème de l'exclusion perpétuée.Les minorités visibles continuent d'être marginalisées, ce qui peut entraîner de la frustration et de la colère dans ces communautés.De plus, une absence de représentation adéquate peut renforcer les stéréotypes.Sans des représentations positives et variées, les préjugés existent et se renforcent, influençant négativement l'opinion publique à leur égard.Enfin, cela peut également entraîner une perte de diversité culturelle dans les médias.Sans l'inclusion des voix et des histoires des minorités, les médias restent monotones et ne reflètent pas la réalité multiculturelle de la société.A mon avis, une meilleure représentation des minorités visibles dans les médias est essentielle.Elle doit être encouragée, non seulement par les entreprises médias, mais également par la société dans son ensemble.Il est important de former les professionnels des médias pour qu'ils puissent identifier et éliminer les biais,et de promouvoir une culture de la diversité dans les salles de production.En conclusion, la représentation des minorités visibles dans les médias est un enjeu crucial pour notre société. Elle peut contribuer à un monde plus inclusif et harmonieux, mais nécessite des efforts concertés de tous les acteurs concernés

阅读快速过词

2025-03-14
0325julyfunnotes

仅提取文字。不翻译.在句中翻译高亮部分( == 括起来的部分),一般是 1 ~ 3 个词语构成的词组或一句话,保留原文,在高亮部分后面用括号翻译. 如果某句话有高亮部分,在后面直接显示这句话的翻译。例如: Une génération(一代 )==inoxydable==(不受影响的、有活力的 )充满活力的一代Une génération(一代 )==inoxydable==(不受影响的、有活力的 )充满活力的一代C'est un phénomène(现象 )unique(独特的 )dans l'histoire(历史 )française, né(诞生 )d'une ==conjonction==(结合 )particulièrement(特别地 )==favorable==(有利的 )de la ==démographie==(人口统计学 、人口状况 )et de l'économie plus rare que l'on sait déjà qu'il ne pourra pas ==durer==.这是法国历史上一个独特的现象,它诞生于人口状况和经济特别有利的结合,这种情况比人们已知的更加罕见,并且不会持续下去。Ce phénomène, c'est l'==apparition==(出现 )d'une génération ☆==inédite==(前所未有的 ).这种现象就是一代前所未有的人群的出现。Née entre 1936 et 1950, elle ==fête== aujourd'hui ses 50 - 55 ou 65 ans et ==paraît==(看起来 )en tout point(在各方面 )==hors norme==(不寻常的 ).这代人出生于 1936 年至 1950 年之间,如今他们==庆祝==自己 50 - 55 岁或 65 岁生日,并且在各方面看起来都不寻常。D'abord, parce qu'elle est ==fort== nombreuse(数量众多的 ).首先,因为他们人数众多。Ces plus de 55 ans, qui ==furent== les petits Français ==babillants==(叽叽喳喳的 )du baby - boom(婴儿潮 )de l'après - guerre, représentent aujourd'hui 16 millions de nos ==compatriotes==(同胞 ), soit 20 % de la population! (...)这些 55 岁以上的人,曾是战后婴儿潮中叽叽喳喳的法国小孩,如今代表着 1600 万我们的同胞,占人口的 20%!(...)Mais ces nouveaux seniors(老年人 )ne sont pas vieux, ou ==tout au moins==(至少 )ne ==se sentent== pas âgés(年老的 ).但是这些新的老年人并不老,或者至少感觉自己不老。==Contrairement à==(与…… 相反 )leurs ==aînés==(年长的人 ), partis à la retraite(退休 )souvent ==usés==(疲惫不堪的 )par le travail et les problèmes de santé(健康问题 ), les ==sexagénaire==(六十多岁的人 )d'aujourd'hui ont ☆==à peine== quelques mèches ==grises==(几缕白发 ).与他们的长辈不同,长辈们退休时常常因工作和健康问题而疲惫不堪,如今六十多岁的人==几乎==只有几缕白发。Ils sont général(总体上 )==bien portants==(身体健康的 ), ==soucieux== de(关心 )leur apparence(外貌 ), ==avides de==(渴望 )loisirs(休闲活动 ), de voyages et de sport... (...)他们总体上身体健康,注重外貌,渴望休闲活动、旅行和运动……(...)Il est donc de plus en plus ==anachronique==(不合时宜的 )de ne voir en la ==vieillesse==(老年 )qu'une image ==morbide==(病态的 )de ==rigidité==(僵化 ), de conservatisme(保守主义 )et de @==décrépitude==(衰老 ). 因此,仅仅将老年看作是一幅病态的僵化、保守主义和衰老的画面,越来越不合时宜。Les sexagénaire sont jeunes.六十多岁的人还年轻。Et @==fringants==(时髦的 ).并且很时髦。Que vont - ils donc faire?那么他们会做什么呢?Prendre leur retraite, comme la loi le leur permet?像法律允许的那样退休?Ou ==s'obstiner à==(坚持 )garder les ==rênes==(控制权 )de leurs entreprises, à occuper les postes d'administrateurs(管理人员职位 )et les ==sièges== électifs(选举席位 )? (...)还是坚持掌控自己企业的控制权,担任管理人员职位和选举席位?(...)Et, en France, la ==classe politique==(政治阶层 )pourrait bien ==ressembler==, tout du moins 至少 en nombre d'années(在年龄方面 ), à un « ==pouvoir== gris(灰色权力,指老年人的权力 ) ».而且,在法国,政治阶层很可能在年龄方面与 “灰色权力” 颇为相似。Plus de la moitié(一半以上 )des ==sénateurs==(参议员 )ont plus de 60 ans, l'âge moyen(平均年龄 )des ==maires==(市长 )de communes de plus de 3 500 habitants est de 54 ans.一半以上的参议员年龄超过 60 岁,居民超过 3500 人的市镇的市长平均年龄为 54 岁。==Idem==(同样 )pour ceux qui les ==élisent==(选举他们 ).选举他们的人也是如此。==Alors qu=='ils représentent 20 % de la population, les retraités(退休人员 )forment déjà 30 % des électeurs(选民 ).虽然退休人员占人口的 20%,但他们已经构成了 30% 的选民。==Bref==(总之 ), la démocratie a les tempes ==blanchies==(指老年人在政治中占比大 ).总之,民主政治中老年人占比很大。==Or==, quand les papy - boomers(婴儿潮一代的老年人 )seront à la retraite, ils auront encore plus de temps.然而,当婴儿潮一代的老年人退休后,他们将有更多的时间。Vont - ils ==accaparer==(垄断 )les affaires publiques(公共事务 )==à leur avantage==(对他们有利 )?他们会为了自身利益垄断公共事务吗?Faut - il ==redouter== une ==géroncratie==(老人统治 )de la francophonie(法语国家或地区 )?是否应该担心法语国家或地区出现老人统治的情况?« Non pas! » Jean - Philippe Viriot - Durandal, maître de conférences(大学讲师 )en sociologie à l'université de Franche - Comté, ==en est convaincu==(坚信 ).“并非如此!” 弗朗什 - 孔泰大学的社会学讲师让 - 菲利普・维里奥 - 杜兰达尔坚信这一点。Vieux ne veut pas forcément(不一定 )dire ==réac==(保守的 ,是 rétrograde 的缩写 ).年老不一定意味着保守。Il en veut pour preuve(为此提供证据 )deux exemples, ==décortiqués==(剖析 )dans son livre.他在自己的书中剖析了两个例子来作为证据。D'abord, la dernière élection présidentielle(总统选举 ), où le vote(投票 )pour le Front national(国民阵线 ,法国极右翼政党 )fut ==autant le fait== des jeunes électeurs(年轻选民 )que de leurs aînés.首先,上一次总统选举中,投票给国民阵线的既有年轻选民,也有年长选民。La preuve aussi avec l'adoption(采用 )de l'euro.采用欧元的情况也是一个证据。« Six ==mois== après l'introduction définitive(最终引入 )de la monnaie unique européenne(单一欧洲货币 ), les ==nostalgiques==(怀旧者 )du franc étaient ==à peine plus== nombreux chez les plus de 65 ans que dans l'ensemble de la population – 53 %, contre 48 % », écrit le sociologue.这位社会学家写道:“在最终引入单一欧洲货币六个月后,65 岁以上人群中怀念法郎的人数仅略多于全体人口中的比例 —— 53% 对 48% 。”Qui ajoute(补充说 )que « l'==opposition== entre les jeunes générations, ouvertes sur le monde et sur l'avenir, et les anciennes, ==rétives==(抵触的 )au changement et frustraires(受挫的 )à la ==nouveauté==(新奇事物 ), ne serait que ==caricature==(夸张的描述 ) ».他还补充说:“年轻一代对世界和未来持开放态度,而老一辈对变化抵触且对新奇事物感到受挫,这种==对立==可能只是一种夸张的描述 。”(...) Ajoutons, ==pour parfaire ce tableau==, que ces seniors ==ont reçu== de la science la perspective ==d'un quart de siècle== de longévité supplémentaire ==traversé en== relative bonne santé. « À 60 ans aujourd'hui, on a encore ==devant soi== vingt-cinq, ==voire== trente ans », explique Patrice Leclerc, responsable du programme personnes âgées à la Fondation de France. Tous se disent actifs, se sentent jeunes et le sont. » Toniques, les papy-boomers sont ==formatés== pour le changement. Leur histoire est en effet aussi celle de la ==fin des certitudes==. (...) Une génération ==décrispée== pour laquelle il est devenu presque ==banal== de refaire sa vie largement passé l'âge de la retraite et tout aussi courant que ces nouveaux amoureux conservent chacun son ==logement==. Les papy-boomers sont individualistes, ce sont d'ailleurs eux qui ont mis ==en vogue== le concept. (...)Alors, ==que faut-il attendre de== cette génération si nombreuse et si peu connue ? « La société française ne s'est jamais demandé comment accompagner le vieillissement ==inexorable== de sa population, analyse Patrice Leclerc, de la Fondation de France. Le vieillissement était jusqu'il y a peu une stricte ==affaire== de famille. » Or, aujourd'hui, c'est un défi massif ==lancé== à notre pays. Déjà, les problèmes s'accumulent. De la prise en charge des personnes âgées dépendantes - « dans vingt ans, il y aura 2 400 000 personnes âgées de plus de 85 ans », rappelle volontiers Hubert Falco, secrétaire d'État aux Personnes âgées - au ==financement== des retraites, les solutions manquent. ==Faute d'y== avoir réfléchi, car la recherche sur les conséquences sociales du vieillissement reste limitée. Surtout ==éviter d'y penser==...Pourtant, en 2006, le ==choc== démographique sera ==rude==. C'est l'année où les centaines de ==milliers== de baby-boomers, nés ==lors du pic== des naissances de 1946, arriveront à la retraite. C'est ==bientôt==.(...) Ajoutons, pour parfaire ce tableau(为了完善这种情况), que ces seniors ont reçu(得知) de la science la perspective d'un quart de siècle(四分之一世纪 )de longévité supplémentaire traversé en(度过) relative bonne santé. (...)补充一点,为了完善这种情况,这些老年人从科学领域得知,他们有望在相对健康的状态下再度过四分之一世纪的额外寿命。 « À 60 ans aujourd'hui, on a encore devant soi(面前有) vingt-cinq, voire(甚至) trente ans », explique Patrice Leclerc, responsable du programme personnes âgées à la Fondation de France. “如今60岁的人,面前还有25年,甚至30年的时光,” 法国基金会老年人项目负责人帕特里斯·勒克莱尔解释道。 Tous se disent actifs, se sentent jeunes et le sont. » Toniques, les papy-boomers sont formatés(适应 )pour le changement. 所有人都说自己很活跃,感觉自己年轻,而且也确实如此。” 婴儿潮一代的老年人充满活力,能够适应变化。 Leur histoire est en effet aussi celle de la fin des certitudes(确定性的终结). 事实上,他们的经历也是确定性终结的过程。 (...) Une génération décrispée(放松心态的) pour laquelle il est devenu presque banal(平常的) de refaire sa vie largement passé l'âge de la retraite et tout aussi courant que ces nouveaux amoureux conservent chacun son logement(住所). (...)这是心态放松的一代,对于他们来说,在远远超过退休年龄后重新开始生活几乎已经是平常事,就如同这些新恋人各自保留自己的住所一样常见。 Les papy-boomers sont individualistes, ce sont d'ailleurs eux qui ont mis en vogue(使流行) le concept. 婴儿潮一代的老年人是个人主义者,此外,正是他们让这个概念流行起来。 (...) Alors, que faut-il attendre de(应该对……抱有怎样的期待) cette génération si nombreuse et si peu connue ? 那么,对于这样人数众多却又鲜为人知的一代,我们应该对他们抱有怎样的期待呢? « La société française ne s'est jamais demandé comment accompagner le vieillissement inexorable(不可避免的) de sa population, analyse Patrice Leclerc, de la Fondation de France. “法国社会从未思考过如何应对其人口不可避免的老龄化问题,” 法国基金会的帕特里斯·勒克莱尔分析道。 Le vieillissement était jusqu'il y a peu une stricte affaire(事情) de famille. ” 直到不久前,老龄化还完全是家庭内部的事情。” Or, aujourd'hui, c'est un défi massif lancé(带来) à notre pays. 然而如今,这对我们国家来说是一个巨大的挑战。 Déjà, les problèmes s'accumulent. De la prise en charge des personnes âgées dépendantes - « dans vingt ans, il y aura 2 400 000 personnes âgées de plus de 85 ans », rappelle volontiers Hubert Falco, secrétaire d'État aux Personnes âgées - au financement(资金筹集) des retraites, les solutions manquent. 问题已经在不断积累。从对失能老年人的照顾—— “二十年后,将有240万85岁以上的老年人,” 负责老年人事务的国务秘书于贝尔·法尔科乐于提醒道—— 到养老金的资金筹集,都缺乏解决方案。 Faute d'y(由于没有) avoir réfléchi, car la recherche sur les conséquences sociales du vieillissement reste limitée. 由于没有考虑到这一点,因为关于老龄化社会后果的研究仍然有限。 Surtout éviter d'y penser(避免去想它)... 尤其要避免去想它... Pourtant, en 2006, le choc(冲击) démographique sera rude(严峻的). 然而,在2006年,人口结构的冲击将是严峻的。 C'est l'année où les centaines de milliers(成千上万) de baby-boomers, nés lors du pic(在……高峰期时) des naissances de 1946, arriveront à la retraite. 在这一年,数十万在1946年出生高峰期出生的婴儿潮一代将退休。 C'est bientôt(很快). 这很快就会到来。题目ironique 讽刺性polémique 争论性的dubitatif 怀疑性的quels nuages pèsent sur.. 什么乌云压在 ..

阅读500词

2025-03-14
0325julyfunnotes

Prompt: 提取图中文字,并在词语后后直接附上中文词解释(注意是在上下文中的意思),常规冠词等特别简单的词不翻译。每个句子后一行直接跟中文翻译. 例如  Colère(愤怒) noire(黑色) contre visages(面孔) pâles(苍白). Apartheid(种族隔离) sur nos écrans(屏幕) 黑人的愤怒针对白人面孔。我们屏幕上的种族隔离| tri | Colère | pâles | 分类 | 愤怒 | 苍白 | | --------------------- | ------------------------- | --------------------- | --------- | ---------- | ----------- | | visages | Apartheid | revendications | 面孔 | 种族隔离 | 诉求 | | concernés | minorités | postes | 相关者 | 少数 n. | 职位 | | plateaux | ==signalisation== | la couleur de la peau | 平台 | 标识 n. | 肤色 | | origines | série | que faire? | 出身 n. | 电视剧 | 做什么 ph. | | proscrit | comptage | la mise en fiches | 禁止 v. | 计数 n. | 记录建档 n. | | chaînes | ==critères== | retenus | 频道 | 标准 | 采用的 adj | | Tout se résume | volonté | exigé | 都归结为 | 意愿 | 要求 | | volontariste | ==enjeux== | l'inclusion | 积极主动的 | 关键问题 | 包容 n. | | montre aux jeunes | dans son ensemble | modèles positifs | 表明 ph. | 整体上 ph. | 好榜样 ph. | | inspirer | briser | signifient | 激励 v. | 打破 v. | 意味着 v. | | l'exclusion | perpétuée | marginalisées | 排斥 | 持续的 | 边缘化 adj. | | entraîner | frustration | communautés | 导致 v. | 沮丧 n. | 群体 n. | | adéquate | préjugés | à leur égard | 足够 adj. | 偏见 n. | 关于他们 ph. | | monotones | former les professionnels | biais | 单调 adj. | 培养专业人士 ph. | 偏见 n. | | des efforts concertés | acteurs | | 共同努力 ph. | 参与者 n. | | | --- | | | | | | | corridas | jugement | la cour d’appel | 斗牛 n. | 判决 n. | 上诉法院 n. ph. | | reprise | militants | renaisse | 恢复 v.<br> | 活动人士 | 复兴 v. | | décennies | interruption | arènes | 数十年 n. | 中断 n. | 斗牛场 n. | | ancestrale | dénoncer | souffrance | 祖传的 adj. | 谴责 v. | 痛苦 n. | | ne subit pas | douleur | intolérants | 没有遭受 ph. | 疼痛 n. | 偏执 adj. | | spectacle | barbare | rituel | 表演 n. | 野蛮的 adj. | 仪式 n. | | s’inscrit dans | choque | qui nous renvoie à | 符合,属于 ph. | 令人震惊 v. | 让我们想到 ph. | | --- | | | | | | | crise | fatalité | À qui revient | 危机 n. | 必然 n. | 归因给谁 ph. | | folle | philosophe | révoltés | 疯狂 adj | 哲学家 n. | 叛逆的 adj. | | déprimés | | | 抑郁 adj | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

口语200词

2025-03-13
0325julyfunnotes

| télétravail | selon le texte | durable | employeur | salariés | chez soi | | ----------------- | ----------------- | ----------- | ------------------- | --------------------------- | ------------- | | chiffre | indiqué | trajet | effectivement | protection | émission | | dioxyde de carbon | substantiellement | malentendue | par contre | frais | loyer | | protection | gaz | enfermé | épidémie | se rencontrer | hors ligne | | discuté | conférence | au niveau | efficacité | distractions | imprévus | | planning | diviser | toucher | chômage | majeur | sont remplace | | poste | j'ai .. ans | j'habite en | Je me spécialise en | ingénierie de l'information | grande | | | | | | | | | | | | | | | | | | | | | || | | | | | | | ------ | ------ | ------ | ------ | ----- | ----- | | 数据 | (文章)显示 | 旅程 | | | | | | | 误会 | 另一方面来说 | 费用 | 租金 | | 保护 n. | 废气,气体 | 关在家里 | 流行病 | 见面 | 线下 | | 谈论 | 会议 | 在...方面 | 效益 | 分心 n, | 意外 n. | | 计划 | 划分 | 触碰 | | 失业 | 被替代 | | 岗位 | | | 我的专业是 | 信息工程 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 数据 | (文章)显示 | 旅程 | | | | | | | 误会 | 另一方面来说 | 费用 | 租金 | | 保护 n. | 废气,气体 | 关在家里 | 流行病 | 见面 | 线下 | | 谈论 | 会议 | 在...方面 | 效益 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |hell

1 社交媒体

2025-03-13
0325julyfunnotes

prompt翻译为中文(用表格形式一左一右显示法文和中文, markdown 格式)。分为不同段落,每个段落一个表格回答问题。每个问题回答一段,这一段含4-5句话。(用表格形式一左一右显示回答和问题的法文和中文, markdown 格式)xxx 的事实作用fait partie du quotidien deconstitue une source deCette technologie transforme notre société en ..大众观点,引起话题certaines personnes estiment qu'elle a des effets négatifsIl est donc légitime de se demander s'il fautCependant, elle suscite aussi des ==inquiétudes== notamment sur措施绝对limiter ou interdire l'accès des enfants à la télévision好处结构avec des dessins animés, des documentaires ou des films adaptés à leur âge.offre aux enfants un moyen deCertains programmes encouragentce qui améliore l'efficacitéBeaucoup d'entreprises utilisent déjà ... pour ...Grâce à ..., les .. peuvent ...坏处ce qui peut favoriser ..Certains programmes ne sont pas adaptés aux enfantsréduit l'activité physiqueUne consommation excessive de télévision peut diminuerce qui peut nuire auxnoun.un impact négatif达成这一目标的阻碍Discutons maintenant des obstacles à la réalisation de cet objectif.个人观点,措施结构il ne faut pas.. mais plutôtIl est essentiel queL'important est de trouver un équilibre entre xxx et xxxverbencadrer son usagefixent des limites de tempsencouragent d'autres ..总结结构Toutefois好处peut être un outil enrichissants'il est utilisé de manière contrôlée坏处une consommation excessive peut avoir des effets négatifsIl ne s'agit donc pas de l'interdire totalementmais de l'utiliser avec modération 节制sous la supervision des1 社交媒体Bonjour, le sujet que j'ai choisi aujourd'hui est les réseaux sociauxeCes plateformes numériques comme Facebook, Instagram ou TikTok ont transformé notre manière de communiquer et d'accéder à l'information. Elles offrent de nombreuses opportunités, mais présentent également des risques. Pour cette présentation, je vais commencer par vous présenter les avantages, puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure.Pour commencer, les avantages.Tout d'abord, les réseaux sociaux facilitent la communication.Ils permettent de rester en contact avec ses amis et sa famille, même à distance. De plus, ils sont devenus un outil essentiel pour le travail et l'éducation.Deuxième avantage, l'accès rapide à l'information.Les réseaux sociaux sont une source d'actualité et d'apprentissage. Ils permettent de découvrir de nouvelles idées et d'accéder à des contenus variés.Enfin, les opportunités professionnelles.De nombreuses entreprises utilisent les réseaux sociaux pour recruter, promouvoir leurs produits et interagir avec leurs clients. Passons maintenant aux inconvénients.On a par exemple la dépendance et l'addiction. Beaucoup de personnes passent trop de temps sur les réseaux sociaux, ce qui peut nuire à leur concentration et à leur bien-être mental.De plus, il y a la propagation de fausses informations. Il est parfois difficile de distinguer les vraies informations des fake news. Cela peut influencer négativement l'opinion publique.Et pour finir, il peut y avoir des problèmes de vie privée. Les données personnelles sont souvent collectées et utilisées par les entreprises sans que les utilisateurs en aient pleinement conscience. A mon avis, les réseaux sociaux sont un outil puissant qui offre de nombreux avantages,mais ils doivent être utilisés avec prudence.Il est important d'éduquer les utilisateurs, notamment les jeunes,pour qu'ils adoptent une utilisation responsable et équilibrée.En conclusion, les réseaux sociaux ont révolutionné notre manière de communiquer. Ils sont devenus indispensables, mais peuvent aussi être dangereux s'ils ne sont pas utilisés correctement. Il est donc essentiel de trouver un juste milieu entre leur utilisation et la protection des utilisateurs.Voici quelques questions que pourrait poser le jury. Les réseaux sociaux sont-ils bénéfiques ou dangereux pour les jeunes ? Pensez-vous qu'il faudrait limiter l'accès aux réseaux sociaux ?comment lutter contre la désinformation sur internet. J'espère que cette vidéo vous a aidé, c'était Clément, à la prochaine, ciao !以下是用表格形式一左一右显示的内容:| Français | 中文 | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | Bonjour, le sujet que j'ai choisi aujourd'hui est les réseaux sociaux. | 您好,今天我选择的主题是社交网络。 | | Ces plateformes numériques comme Facebook, Instagram ou TikTok ont transformé notre manière de communiquer et d'accéder à l'information. | 这些数字平台,如Facebook、Instagram或TikTok,已经改变了我们交流和获取信息的方式。 | | Elles offrent de nombreuses opportunités, mais présentent également des risques. | 它们提供了许多机会,但也带来了风险。 | | Pour cette présentation, je vais commencer par vous présenter les avantages, puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure. | 在这次演讲中,我将首先介绍社交网络的优势,然后是缺点。最后,我将分享我的个人观点并总结。 |Avantages / 优势|Français|中文| |---|---| |Pour commencer, les avantages.|首先,社交网络的优势。| |- Tout d'abord, les réseaux sociaux facilitent la communication.|- 首先,社交网络促进了交流。| |- Ils permettent de rester en contact avec ses amis et sa famille, même à distance. De plus, ils sont devenus un outil essentiel pour le travail et l'éducation.|- 它们使人们即使相隔遥远也能保持与朋友和家人的联系。此外,它们已成为工作和教育的必备工具。| |- Deuxième avantage, l'accès rapide à l'information.|- 第二个优势是快速获取信息。| |- Les réseaux sociaux sont une source d'actualité et d'apprentissage. Ils permettent de découvrir de nouvelles idées et d'accéder à des contenus variés.|- 社交网络是新闻和学习的来源。它们使人们能够发现新思想并访问多样化的内容。| |- Enfin, les opportunités professionnelles.|- 最后,专业机会。| |- De nombreuses entreprises utilisent les réseaux sociaux pour recruter, promouvoir leurs produits et interagir avec leurs clients.|- 许多企业利用社交网络进行招聘、推广产品并与客户互动。|Inconvénients / 缺点|Français|中文| |---|---| |Passons maintenant aux inconvénients.|接下来是社交网络的缺点。| |- On a par exemple la dépendance et l'addiction. Beaucoup de personnes passent trop de temps sur les réseaux sociaux, ce qui peut nuire à leur concentration et à leur bien-être mental.|- 例如,有依赖和成瘾的问题。很多人在社交网络上花费过多时间,这可能会损害他们的注意力和心理健康。| |- De plus, il y a la propagation de fausses informations. Il est parfois difficile de distinguer les vraies informations des fake news. Cela peut influencer négativement l'opinion publique.|- 此外,还有虚假信息的传播。有时很难区分真实信息和虚假信息。这可能会对公众舆论产生负面影响。| |- Et pour finir, il peut y avoir des problèmes de vie privée. Les données personnelles sont souvent collectées et utilisées par les entreprises sans que les utilisateurs en aient pleinement conscience.|- 最后,还有隐私问题。个人数据经常被企业收集和使用,而用户往往没有充分意识到这一点。|Opinion Personnelle / 个人观点|Français|中文| |---|---| |A mon avis, les réseaux sociaux sont un outil puissant qui offre de nombreux avantages,|在我看来,社交网络是一个强大的工具,提供了许多优势,| |- mais ils doivent être utilisés avec prudence.|- 但是它们必须谨慎使用。| |- Il est important d'éduquer les utilisateurs, notamment les jeunes,|- 教育用户,尤其是年轻人,非常重要,| |- pour qu'ils adoptent une utilisation responsable et équilibrée.|- 以便他们能够负责任、平衡地使用社交网络。|Conclusion / 结论|Français|中文| |---|---| |En conclusion, les réseaux sociaux ont révolutionné notre manière de communiquer. Ils sont devenus indispensables, mais peuvent aussi être dangereux s'ils ne sont pas utilisés correctement. Il est donc essentiel de trouver un juste milieu entre leur utilisation et la protection des utilisateurs.|总之,社交网络已经改变了我们交流的方式。它们变得不可或缺,但如果不正确使用,也可能带来危险。因此,找到使用与保护用户之间的平衡至关重要。|Réponses aux Questions1. Les réseaux sociaux sont-ils bénéfiques ou dangereux pour les jeunes ?| Français | 中文 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Les réseaux sociaux peuvent être à la fois bénéfiques et dangereux pour les jeunes. Ils offrent des opportunités de communication et d'éducation, mais peuvent aussi exposer les jeunes à des contenus inappropriés et au cyberharcèlement. Les réseaux sociaux facilitent également l'accès à l'information et permettent aux jeunes de se connecter avec d'autres personnes partout dans le monde. Cependant, l'utilisation excessive peut entraîner des problèmes de santé mentale, tels que l'anxiété et la dépression. Il est donc crucial de sensibiliser les jeunes aux risques potentiels et de promouvoir une utilisation responsable des réseaux sociaux. Les parents et les éducateurs doivent également jouer un rôle actif dans la surveillance et l'éducation des jeunes sur l'utilisation des réseaux sociaux. | 社交网络对年轻人既有益处,也有危险。它们提供了交流和教育的机会,但也可能使年轻人接触到不适宜的内容和网络欺凌。社交网络还方便年轻人获取信息,并使他们能够与世界各地的人们建立联系。然而,过度使用可能导致心理健康问题,如焦虑和抑郁。因此,教育年轻人了解潜在风险并推广社交网络的负责任使用至关重要。父母和教育者也应在监控和教育年轻人使用社交网络方面发挥积极作用。 |2. Pensez-vous qu'il faudrait limiter l'accès aux réseaux sociaux ?| Français | 中文 | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Limiter l'accès aux réseaux sociaux pour les mineurs pourrait être une mesure utile pour protéger leur santé mentale et leur vie privée. Cependant, cette limitation doit être équilibrée pour ne pas restreindre leur accès à l'information et aux opportunités éducatives. Les parents et les éducateurs doivent être impliqués dans la surveillance et l'éducation des jeunes sur l'utilisation des réseaux sociaux. Les entreprises technologiques devraient également collaborer avec les gouvernements pour mettre en place des mesures de protection efficaces. Enfin, l'éducation aux médias et la sensibilisation aux risques sont essentielles pour une utilisation responsable des réseaux sociaux. Les gouvernements et les entreprises doivent travailler ensemble pour trouver un équilibre entre protection et liberté d'accès à l'information. | 对未成年人限制访问社交网络可能是保护他们心理健康和隐私的有用措施。然而,这种限制必须是平衡的,以免限制他们获取信息和教育机会。父母和教育者应参与监控和教育年轻人使用社交网络。科技公司也应与政府合作,建立有效的保护措施。最后,媒体教育和风险意识是社交网络负责任使用的必备条件。政府和企业必须共同努力,在保护和信息获取自由之间找到平衡。 |3. Comment lutter contre la désinformation sur Internet ?| Français | 中文 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | Pour lutter contre la désinformation, il est essentiel de renforcer le fact-checking et de promouvoir l'éducation aux médias. La collaboration entre les vérificateurs de faits et les entreprises de réseaux sociaux est cruciale pour identifier et étiqueter les informations fausses. Les pratiques de modification comportementale, telles que ==récompenser== les utilisateurs qui partagent des informations exactes, peuvent être efficaces. Il est important de sensibiliser le public aux risques de la désinformation et de fournir des ressources pour vérifier les sources d'information fiables. Enfin, soutenir la ==littératie== numérique et renforcer la pensée critique sont essentiels pour se défendre contre la désinformation. | 要对抗虚假信息,必须加强事实核查并推广媒体素养教育。事实核查者与社交网络公司之间的合作对于识别和标记错误信息至关重要。行为修正实践,如奖励分享准确信息的用户,可以有效地减少虚假信息的传播。教育公众了解虚假信息的风险并提供可靠信息来源的资源至关重要。最后,支持数字素养并增强批判性思维对于抵御虚假信息至关重要。 | | | |来自 Perplexity 的回答: pplx.ai/shareBonjour, le sujet que j'ai choisi aujourd'hui estCes ... comme. Elles offrent, mais. Pour cette présentation, je vais commencer par vous présenter les avantages, puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure. Est-ce que c'est bon pour vous ?!Pour commencer, les avantages.Tout d'abord, ...Ils permettent de ... même à distance.De plus, ...Deuxième avantage, ...... Ils permettent de ...Enfin, ...... Passons maintenant aux inconvénients.On a par exemple ... Beaucoup de .., ce qui peut nuire à ...De plus, .. Il est parfois difficile .. Cela peut ...Et pour finir, il peut y avoir des problèmes ... A mon avis,...mais ils doivent être ...Il est important d'...pour qu'ils ..En conclusion, ... Il est donc essentiel de ...2 工作和科技Bonjour, aujourd'hui j'ai choisi de vous parler de l'intelligence artificielle. Cette technologie transforme notre société en ==automatisant== des tâches et en améliorant les ==performances== dans de nombreux domaines comme la médecine, l'==industrie== et l'éducation. Cependant, elle suscite aussi des ==inquiétudes== notamment sur l'emploi et l'éthique.Pour cette présentation, je vais commencer par vous présenter les avantages puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure.Pour commencer, les avantages. Tout d'abord, on a une amélioration de la productivité.L'IA permet d'==automatiser== des tâches répétitives, ce qui améliore l'efficacité des entreprises et réduit les erreurs humaines. Beaucoup d'entreprises utilisent déjà des IAs conversationnels pour gagner du temps sur les tâches à faible valeur ajoutée et ainsi se concentrer sur les tâches à forte valeur ajoutée. Deuxième avantage, les avancées médicales. Grâce à l'intelligence artificielle, les médecins peuvent analyser plus rapidement les maladies et proposer des traitements plus précis.Là encore, les erreurs de ==diagnostic== peuvent être réduites. Enfin, l'innovation au sens large dans de nombreux domaines. L'IA est utilisée dans les véhicules autonomes, les assistants vocaux et même dans la recherche scientifique, facilitant ainsi notre quotidien et notre qualité de vie. Passons maintenant aux inconvénients. On a par exemple la perte d'emploi.L'==automatisation== remplace certains travailleurs, notamment dans les usines et les services, ce qui peut créer du chômage. Beaucoup de travailleurs ont peur de ==perdre leur emploi== face à l'IA, qui peut être source de stress. De plus, on a des problèmes éthiques. L'utilisation de l'IA soulève des questions sur la protection des données personnelles et la prise de décision automatisée. Il y a toujours un risque que nos données soient utilisées à des fins ==malveillantes==.Et pour finir, on a une dépendance excessive à la technologie. Plus l'IA progresse, plus nous risquons de devenir dépendants des ==machines==, ce qui peut réduire notre ==esprit== critique et nos compétences pratiques.À mon avis, l'intelligence artificielle est une avancée technologique majeure qui doit être ==encadrée== pour éviter les ==dérives==. Il est essentiel d'adopter une ==réglementation== stricte pour protéger les droits des individus et ==garantir== une transition équilibrée pour les travailleurs impactés.En conclusion, l'IA offre des possibilités incroyables, mais pose aussi des défis sociaux et éthiques. Son développement doit être contrôlé afin de maximiser ses ==bénéfices== tout en réduisant ses effets négatifs.Voici quelques questions que pourrait poser le jury. Pensez-vous que l'IA remplacera les humains dans tous les domaines ? Comment l'IA peut-elle être utilisée de manière éthique ?L'IA représente-t-elle un danger pour la société ?3. 教育模拟:Bonjour, le sujet que je choisit aujourd'hui est est-ce qu'il est necessaire de interdire les enfants de télévision. 电视Bonjour, le sujet que j'ai choisi aujourd'hui est « Faut-il priver les enfants de télévision ? » Aujourd'hui, la télévision ==fait partie du quotidien de== nombreuses familles et ==constitue une source de== divertissement et d'apprentissage pour les enfants.Cependant, certaines personnes estiment qu'elle a des effets négatifs sur leur développement et leur éducation. Il est donc légitime de se demander s'il faut limiter ou interdire l'accès des enfants à la télévision. Pour cette présentation, je vais commencer par vous présenter les avantages, puis les inconvénients, et enfin je terminerai avec mon opinion personnelle avant de conclure.Pour commencer, les avantages de la télévision pour les enfants. Tout d'abord, c'est un outil éducatif et une ouverture sur le monde. De nombreuses émissions éducatives permettent aux enfants d'apprendre de nouvelles choses, comme les langues, les sciences ou l'histoire, de manière ==ludique== et ==interactive==.Deuxième avantage, c'est un divertissement accessible et varié. La télévision offre aux enfants un moyen de ==se détendre== après l'école.avec des dessins animés, des documentaires ou des films adaptés à leur âge. Et enfin un moyen de développer la curiosité et la créativité. Certains programmes encouragent l'imagination et la réflexion des enfants ==en leur faisant découvrir ==de nouvelles cultures, idées et histoires.Passons maintenant aux inconvénients. On a par exemple un risque de ==sédentarité== et d'==obésité==. Regarder la télévision ==pendant de longues heures== réduit l'activité physique des enfants, ce qui peut favoriser l'obésité et les problèmes de santé.De plus, une exposition possible à des contenus ==inappropriés==. Certains programmes ne sont pas adaptés aux enfants et peuvent les exposer à des scènes violentes ou à des stéréotypes négatifs. Et pour finir, un impact négatif sur la concentration et la réussite scolaire. Une consommation excessive de télévision peut diminuer le temps =consacré= aux devoirs, à la lecture et aux interactions sociales, ce qui peut nuire aux résultats scolaires.A mon avis, il ne faut pas priver totalement les enfants de télévision, mais plutôt ==encadrer== son usage. Il est essentiel que les parents choisissent des programmes adaptés, fixent des limites de temps et encouragent d'autres activités comme la lecture, le sport ou les jeux éducatifs. L'important est de trouver un équilibre entre divertissement et apprentissage.En conclusion, la télévision peut être un outil ==enrichissant== pour les enfants s'il est utilisé de manière contrôlée. Toutefois, une consommation excessive peut avoir des effets négatifs sur leur santé et leur développement. Il ne s'agit donc pas de l'interdire totalement, mais de l'utiliser avec ==modération== et sous la supervision des parents.Merci de votre attention.Voici maintenant quelques questions que pourrait vous poser le jury. A partir de quel âge un enfant devrait-il avoir accès à la télévision ? Quels sont les critères pour choisir des programmes adaptés aux enfants ? Pensez-vous que la télévision peut remplacer l'éducation parentale ? Quelles alternatives proposez-vous à la télévision pour divertir et éduquer les enfants ?Les enfants passent-ils trop de temps devant les écrans aujourd'hui ? Comment peut-on limiter leur exposition ? J'espère que cette vidéo vous a aidé. C'était Clément. A la prochaine. Ciao !4 垃圾分类Aujourd'hui, le sujet que j'ai choisi est le tri des déchets. Avec l'augmentation de la pollution et des déchets plastiques, il est essentiel d'adopter des pratiques plus ==respectueuses== de l'environnement.Le tri des déchets permet de faciliter le recyclage et de réduire notre impact écologique. Cependant, cette pratique présente aussi des défis et des contraintes. Pour cette présentation, je vais commencer par vous présenter les avantages, puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure. Est-ce que c'est bon pour vous ?Super ! Pour commencer, les avantages. Tout d'abord, une réduction de la pollution et une préservation de l'environnement. Le tri des déchets permet de recycler et de réutiliser certains matériaux comme le plastique, le verre et le papier, ce qui réduit la quantité de déchets envoyés dans les décharges et les océans.Deuxième avantage, une économie des ressources naturelles. En ==recyclant==, on limite l'exploitation des ressources naturelles comme le bois, le pétrole et les minerais, ce qui permet de préserver ces matières premières pour les générations futures. Et enfin, une prise de conscience écologique et une responsabilité citoyenne. Le tri des déchets sensibilise la population à l'importance de la protection de l'environnement et encourage des comportements plus durables.Passons maintenant aux inconvénients. On a par exemple la complexité et le manque de clarté dans les règles de tri. De nombreuses personnes trouvent le tri difficile car les consignes varient selon les régions et les types de déchets. Cela peut entraîner des erreurs et limiter l'efficacité du recyclage. Dans mon entourage, les gens trouvent facile le tri du papier et du verre. Par contre, ils ont souvent du mal avec le tri des plastiques.De plus, il y a parfois un manque d'infrastructures adaptées. Dans certaines villes ou pays, les infrastructures pour le recyclage sont insuffisantes, ce qui rend le tri des déchets moins efficace. Dans les rues, on trouve finalement peu de poubelles permettant le tri.Et pour finir, cela peut être une contrainte de temps et d'efforts. Trier ses déchets demande du temps et de l'attention, ce qui peut décourager certaines personnes, surtout si elles n'en voient pas immédiatement les bénéfices. A mon avis, le tri des déchets est une nécessité pour protéger notre planète et réduire la pollution. Cependant, il est important que les gouvernements mettent en place des règles plus claires et des infrastructures adaptées pour faciliter cette pratique.L'éducation et la sensibilisation sont également essentielles pour encourager davantage de personnes à adopter le tri des déchets. En conclusion, le tri des déchets est une action simple mais efficace pour protéger l'environnement et économiser les ressources naturelles. Bien qu'il puisse être contraignant, il est essentiel d'encourager cette pratique à grande échelle pour garantir un avenir plus durable.Merci pour votre attention. Maintenant, nous allons voir quelques questions que pourrait potentiellement poser le jury. Pourquoi le tri des déchets est-il important ? Quels sont les principaux obstacles à la mise en place d'un bon système de tri ? Pensez-vous que le recyclage est suffisant pour lutter contre la pollution ? Et enfin, comment peut-on encourager davantage de personnes à trier leurs déchets ?J'espère que cette vidéo vous a aidé. C'était Clément. A la prochaine. Ciao !种族平等以下是法文和中文的对比翻译,使用Markdown表格格式,分为不同段落:引言| 法文 | 中文 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- | | Bonjour, le sujet que j'ai choisi aujourd'hui est la représentation des minorités visibles dans les médias. | 你好,今天我选择的主题是媒体中对可见少数群体的代表性。 | | La télévision, les débats et les séries restent des espaces où les minorités visibles sont trop souvent invisibles, malgré les appels à la diversité. Cette situation présente des ==enjeux== majeurs, avec des avantages et des inconvénients à considérer. | 电视、辩论和系列节目仍然是可见少数群体经常被忽视的领域,尽管人们呼吁多样性。这一情况带来了重大的挑战,既有利也有弊需要考虑。 | | Dans cette présentation, je vais d'abord vous montrer les avantages d'une meilleure représentation, puis les inconvénients de la sous-représentation, et enfin partager mon point de vue personnel avant de conclure. | 在这次演讲中,我将首先展示更好代表性的优势,然后是低代表性的弊端,最后分享我的个人观点并总结。 |优势| 法文 | 中文 | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | | Commençons par les avantages. | 让我们从优势开始。 | | - Tout d'abord, une meilleure représentation des minorités visibles permet de promouvoir l'inclusion sociale. | - 首先,更好的可见少数群体代表性有助于促进社会包容。 | | - Cela montre aux jeunes des minorités qu'ils ont leur place dans la société et peut stimuler leur confiance en eux-mêmes. De plus, cela permet à la société dans son ensemble de mieux comprendre et apprécier la diversité culturelle. | - 这向少数群体的年轻人展示了他们在社会中的位置,并能激发他们的自信。此外,这使整个社会更好地理解和欣赏文化多样性。 | | - Ensuite, une représentation plus équitable dans les médias peut offrir des modèles positifs. | - 其次,媒体中更公平的代表性可以提供积极的榜样。 | | - Les héros et les personnalités des minorités visibles peuvent inspirer les générations futures et contribuer à briser les stéréotypes. | - 可见少数群体的英雄和名人可以激励未来的世代并帮助打破刻板印象。 | | - Enfin, cela peut ouvrir des opportunités économiques pour les membres des minorités. | - 最后,这可以为少数群体成员提供经济机会。 | | - Plus de rôles et de postes dans les médias signifient plus de chances de gagner une vie honorable dans ces secteurs. | - 在媒体中有更多的角色和职位意味着在这些领域有更多机会过上体面的生活。 |弊端| 法文 | 中文 | | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------- | | Passons maintenant aux inconvénients de la sous-représentation. | 现在让我们讨论低代表性的弊端。 | | - Tout d'abord, il y a le problème de l'exclusion ==perpétuée==. | - 首先,有持续排斥的问题。 | | - Les minorités visibles continuent d'être marginalisées, ce qui peut entraîner de la frustration et de la colère dans ces communautés. | - 可见少数群体继续被边缘化,这可能导致这些社区的沮丧和愤怒。 | | - De plus, une absence de représentation adéquate peut renforcer les stéréotypes. | - 此外,缺乏适当的代表性可能会强化刻板印象。 | | - Sans des représentations positives et variées, les préjugés existent et se renforcent, influençant négativement l'opinion publique à leur égard. | - 没有积极和多样的代表性,偏见存在并加强,负面影响了公众对他们的看法。 | | - Enfin, cela peut également entraîner une perte de diversité culturelle dans les médias. | - 最后,这也可能导致媒体中文化多样性的丧失。 | | - Sans l'inclusion des voix et des histoires des minorités, les médias restent monotones et ne reflètent pas la réalité multiculturelle de la société. | - 如果不包含少数群体的声音和故事,媒体将变得单调,并不能反映社会的多元文化现实。 |个人观点| 法文 | 中文 | | ----------------------------------------------------------------------------------------------------------------------- | --------------------------- | | A mon avis, une meilleure représentation des minorités visibles dans les médias est essentielle. | 在我看来,媒体中更好的可见少数群体代表性是至关重要的。 | | - Elle doit être encouragée, non seulement par les entreprises médias, mais également par la société dans son ensemble. | - 这不仅应该被媒体企业鼓励,也应该被整个社会所推动。 | | - Il est important de former les professionnels des médias pour qu'ils puissent identifier et éliminer les biais, | - 有必要培训媒体专业人员,使他们能够识别并消除偏见, | | - et de promouvoir une culture de la diversité dans les salles de production. | - 并在制作现场推广多样性文化。 | | | |结论| 法文 | 中文 | | -------------------------------------------------------------------------------------------------------------------------------- | ------------------------------- | | En conclusion, la représentation des minorités visibles dans les médias est un enjeu crucial pour notre société. | 总之,媒体中对可见少数群体的代表性是我们社会的一个关键问题。 | | Elle peut contribuer à un monde plus inclusif et harmonieux, mais nécessite des efforts concertés de tous les acteurs concernés. | 这可以促进一个更加包容和谐的世界,但需要所有相关方的共同努力。 |来自 Perplexity 的回答: pplx.ai/share人工智能第一段|法文|中文| |---|---| |Bonjour, aujourd'hui j'ai choisi de vous parler de l'intelligence artificielle. Cette technologie transforme notre société en automatisant des tâches et en améliorant les performances dans de nombreux domaines comme la médecine, l'industrie et l'éducation. Cependant, elle suscite aussi des inquiétudes notamment sur l'emploi et l'éthique.|你好,今天我选择与你们讨论人工智能。这项技术通过自动化任务并在医疗、工业和教育等多个领域提高效率,正在改变我们的社会。然而,它也引发了人们对就业和伦理的担忧。| |Pour cette présentation, je vais commencer par vous présenter les avantages puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure.|在这次演讲中,我将首先介绍人工智能的优点,然后是缺点。最后,我将分享我的个人观点并总结。|第二段| 法文 | 中文 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------- | | Pour commencer, les avantages. Tout d'abord, on a une amélioration de la productivité. L'IA permet d'automatiser des tâches répétitives, ce qui améliore l'efficacité des entreprises et réduit les erreurs humaines. | 首先,人工智能的优点。首先,它提高了生产力。人工智能可以自动化重复性任务,这提高了企业的效率并减少了人为错误。 | | Beaucoup d'entreprises utilisent déjà des IAs conversationnels pour gagner du temps sur les tâches à faible valeur ajoutée et ainsi se concentrer sur les tâches à forte valeur ajoutée. | 许多企业已经使用对话式人工智能来节省在低附加值任务上的时间,从而专注于高附加值任务。 | | Deuxième avantage, les avancées médicales. Grâce à l'intelligence artificielle, les médecins peuvent analyser plus rapidement les maladies et proposer des traitements plus précis. | 第二个优点是医疗进步。借助人工智能,医生可以更快地分析疾病并提出更精确的治疗方案。 | | Là encore, les erreurs de diagnostic peuvent être réduites. | 同样,诊断错误也可以减少。 | | Enfin, l'innovation au sens large dans de nombreux domaines. L'IA est utilisée dans les véhicules autonomes, les assistants vocaux et même dans la recherche scientifique, facilitant ainsi notre quotidien et notre qualité de vie. | 最后,人工智能在许多领域推动了广泛的创新。它被应用于自动驾驶汽车、语音助手,甚至科学研究,进而改善了我们的日常生活和生活质量。 |第三段| 法文 | 中文 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------- | | Passons maintenant aux inconvénients. On a par exemple la perte d'emploi. L'automatisation remplace certains travailleurs, notamment dans les usines et les services, ce qui peut créer du chômage. | 现在让我们转到缺点。例如,失业。自动化取代了一些工人,尤其是在工厂和服务业,这可能导致失业。 | | Beaucoup de travailleurs ont peur de perdre leur emploi face à l'IA, qui peut être source de stress. | 许多工人担心会因人工智能而失业,这可能是压力的来源。 | | De plus, on a des problèmes éthiques. L'utilisation de l'IA soulève des questions sur la protection des données personnelles et la prise de décision automatisée. | 此外,还有伦理问题。人工智能的使用引发了对个人数据保护和自动化决策的质疑。 | | Il y a toujours un risque que nos données soient utilisées à des fins malveillantes. | 总是存在我们的数据被用于恶意目的的风险。 | | Et pour finir, on a une dépendance excessive à la technologie. Plus l'IA progresse, plus nous risquons de devenir dépendants des machines, ce qui peut réduire notre esprit critique et nos compétences pratiques. | 最后,还有过度依赖技术的问题。随着人工智能的进步,我们越来越有可能依赖机器,这可能会降低我们的批判性思维和实际技能。 |第四段| 法文 | 中文 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------- | | À mon avis, l'intelligence artificielle est une avancée technologique majeure qui doit être encadrée pour éviter les dérives. | 在我看来,人工智能是一项重大技术进步,需要被规范以避免偏离正轨。 | | Il est essentiel d'adopter une réglementation stricte pour protéger les droits des individus et garantir une transition équilibrée pour les travailleurs impactés. | 采用严格的监管对于保护个人权利和确保受影响工人的平衡过渡至关重要。 |第五段| 法文 | 中文 | | ----------------------------------------------------------------------------------------------------------- | ------------------------------------- | | En conclusion, l'IA offre des possibilités incroyables, mais pose aussi des défis sociaux et éthiques. | 总之,人工智能提供了令人难以置信的可能性,但也带来了社会和伦理挑战。 | | Son développement doit être contrôlé afin de maximiser ses bénéfices tout en réduisant ses effets négatifs. | 人工智能的发展必须受到控制,以便最大限度地发挥其益处,同时减少其负面影响。 |来自 Perplexity 的回答: pplx.ai/share回答和问题对照表| 法文问题 | 中文问题 | 法文回答 | 中文回答 | | -------------------------------------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | Pensez-vous que l'IA remplacera les humains dans tous les domaines ? | 你认为AI会在所有领域取代人类吗? | Je ne pense pas que l'IA remplacera les humains dans tous les domaines. L'IA est conçue pour automatiser et optimiser certaines tâches, mais elle ne peut pas remplacer l'intuition, la créativité et l'empathie humaines. Dans des domaines comme l'art, la médecine et l'éducation, l'interaction humaine est essentielle. L'IA sera plus probablement utilisée pour soutenir et améliorer le travail humain. | 我不认为AI会在所有领域取代人类。AI旨在自动化和优化某些任务,但它无法取代人类的直觉、创造力和同理心。在艺术、医学和教育等领域,人类的互动是至关重要的。AI更有可能被用来支持和改善人类的工作。 | | Comment l'IA peut-elle être utilisée de manière éthique ? | AI如何以道德方式被使用? | L'IA peut être utilisée de manière éthique en respectant la vie privée des utilisateurs, en évitant les biais dans les algorithmes et en garantissant la transparence des processus décisionnels. Il est également important de former des professionnels capables de développer et d'utiliser l'IA de manière responsable. De plus, les entreprises doivent établir des lignes directrices claires pour l'utilisation éthique de l'IA. | AI可以通过尊重用户隐私、避免算法偏见以及确保决策过程透明来以道德方式被使用。同时,培养能够负责任地开发和使用AI的专业人员也非常重要。此外,企业应该制定明确的AI使用指南,以确保其使用是道德的。 |详细回答你认为AI会在所有领域取代人类吗?我不认为AI会在所有领域取代人类。AI旨在自动化和优化某些任务,但它无法取代人类的直觉、创造力和同理心。在艺术、医学和教育等领域,人类的互动是至关重要的。AI更有可能被用来支持和改善人类的工作。通过与AI合作,人类可以专注于更复杂和创造性的任务,从而提高整体效率和创新能力。AI如何以道德方式被使用?AI可以通过尊重用户隐私、避免算法偏见以及确保决策过程透明来以道德方式被使用。同时,培养能够负责任地开发和使用AI的专业人员也非常重要。此外,企业应该制定明确的AI使用指南,以确保其使用是道德的。通过这些措施,可以最大限度地减少AI的负面影响,促进其在社会中的积极应用。来自 Perplexity 的回答: pplx.ai/shareconge第一段:介绍| 法文 | 中文 | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | | | | | Bonjour, le sujet que j'ai choisi est les congés de paternité. Il s'agit d'un sujet très actuel car de plus en plus de pays allongent la durée du congé parental pour permettre aux pères de mieux s'impliquer dans la vie de leurs enfants. | 你好,我选择的主题是父系假。这是一个非常时髦的话题,因为越来越多的国家正在延长父母假期的长度,以便让父亲们更好地参与孩子的生活。 | | Cette mesure vise à favoriser l'égalité entre les hommes et les femmes et à mieux répartir les responsabilités familiales. | 这项措施旨在促进男女平等,并更好地分配家庭责任。 || 法文 | 中文 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | | Cependant, elle présente à la fois des avantages et des inconvénients. Pour cette présentation, je vais commencer par vous présenter les avantages puis les inconvénients. Et enfin, je terminerai avec mon opinion personnelle avant de conclure. Est-ce que c'est bon pour vous ? | 然而,这项措施既有优点也有缺点。在这次演讲中,我将首先介绍优点,然后是缺点。最后,我将分享我的个人观点并总结。这样可以吗? |第三段:优点| 法文 | 中文 | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | | Super ! Pour commencer, les avantages. Tout d'abord, une meilleure implication des pères dans la vie de l'enfant. Avec un congé de paternité plus long, les pères ont l'opportunité de passer plus de temps avec leur bébé, de créer un lien affectif fort et de mieux comprendre les besoins de leurs enfants. | 好的!首先,优点。首先,父亲们在孩子生活中参与得更好。通过更长的父系假,父亲们有机会与宝宝共度更多时间,建立牢固的情感联系,并更好地理解孩子的需求。 | | Deuxième avantage, un meilleur équilibre des tâches domestiques et parentales. Ce type de congé encourage une répartition plus équitable des responsabilités familiales. | 第二个优点是家庭和育儿任务的更好平衡。这种假期鼓励更公平地分配家庭责任。 | | Il permet aux mères de ne pas porter toute la charge des premiers mois de l'enfant / et favorise une plus grande égalité dans le couple. / Et enfin, des effets positifs sur le bien-être de la famille et de l'enfant. / | 它使母亲不必独自承担孩子出生后的前几个月的全部责任,并促进夫妻之间的更大平等。最后,对家庭和孩子的幸福有积极影响。 | | Des études montrent que la présence du père dès les premiers mois a un impact positif sur le développement de l'enfant et réduit le stress post-natal chez les mères. / | 研究表明,父亲在孩子出生后的前几个月的存在对孩子的发展有积极影响,并减少了母亲的产后压力。 |第四段:缺点| 法文 | 中文 | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------- | | Passons maintenant aux inconvénients. On a par exemple un coût économique pour l'Etat et les entreprises. L'allongement du congé de paternité signifie une charge financière supplémentaire pour l'Etat qui doit compenser les revenus des pères, ainsi que pour les entreprises qui doivent s'organiser pour remplacer temporairement leurs employés. | 现在我们来看缺点。例如,对国家和企业来说有经济成本。延长父系假意味着国家需要额外的财务负担来补偿父亲们的收入,同时企业也需要临时替换员工。 | | De plus, cela peut freiner la carrière des pères. Dans certaines entreprises, prendre un congé prolongé peut être mal perçu et ralentir l'évolution professionnelle des pères. Un phénomène similaire à celui que connaissent déjà certaines mères. | 此外,这可能会阻碍父亲们的职业发展。在某些企业中,休长假可能被视为负面影响,并减缓父亲们的职业晋升。这种现象与一些母亲面临的情况类似。 | | Et pour finir, il y a encore des résistances culturelles. Dans certains pays ou certaines entreprises, la culture du travail privilégie l'investissement professionnel et certains pères hésitent encore à prendre un congé de peur d'être jugé. | 最后,还有一些文化上的阻力。在某些国家或企业中,工作文化优先考虑职业投入,一些父亲仍然犹豫是否要休假,因为他们担心被评判。 |第五段:个人观点| 法文 | 中文 | | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | | À mon avis, les congés de paternité sont une avancée sociale essentielle qui permet de mieux équilibrer les rôles familiaux et de renforcer le lien entre le père et l'enfant. Cependant, il est important de sensibiliser les entreprises et la société pour éviter que ce congé soit mal perçu et qu'il ait un impact négatif sur la carrière des pères. | 在我看来,父系假是一项基本的社会进步,它使得家庭角色更好地平衡,并加强了父亲与孩子之间的联系。然而,很重要的是要让企业和社会意识到这一点,以避免这种假期被误解,并对父亲们的职业产生负面影响。 | | Une politique d'accompagnement des employeurs et une normalisation de cette pratique sont nécessaires pour assurer son succès. | 需要有雇主支持的政策和对这一做法的正常化,以确保其成功。 |第六段:结论| 法文 | 中文 | | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ | | En conclusion, les congés de paternité sont une mesure qui favorise l'égalité homme-femme et améliore le bien-être familial. Malgré certains défis économiques et professionnels, leur généralisation représente une avancée importante pour une société plus équilibrée et plus juste. | 总之,父系假是一项促进男女平等并改善家庭幸福的措施。尽管存在一些经济和职业挑战,但其普及代表着朝着更平衡、更公正的社会迈出的一大步。 | | Il est donc nécessaire d'encourager cette pratique et de l'intégrer progressivement dans les mentalités et les politiques d'entreprise. | 因此,有必要鼓励这一做法,并逐渐将其融入人们的观念和企业政策中。 |第七段:结束语| 法文 | 中文 | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | | Merci de votre attention. Voici quelques questions que pourrait vous poser le jury. Pourquoi les congés de paternité sont-ils importants dans la société actuelle ? Pensez-vous qu'il faudrait allonger la durée des congés de paternité ? Pourquoi ? | 谢谢您的关注。以下是一些评审团可能会问的问题:为什么父系假在当今社会很重要?您认为应该延长父系假的时间吗?为什么? | | Quels sont les principaux obstacles à la généralisation des congés de paternité ? Le congé de paternité favorise-t-il réellement l'égalité entre les hommes et les femmes ? | 父系假普及的主要障碍是什么?父系假是否真正促进了男女平等? | | Dans certains pays, les congés de paternité sont encore très courts. Comment pourrait-on convaincre les gouvernements de les allonger ? J'espère que cette vidéo vous a aidé. C'était Clément. A la prochaine. Ciao ! | 在某些国家,父系假仍然很短。如何说服政府延长父系假?希望这段视频对您有帮助。这是Clément。下次见!再见! |来自 Perplexity 的回答: pplx.ai/shar

动词变位

2025-03-11
0325julyfunnotes

第一组 parler 词根 parl | eparle, parles, parle, parlons, parlez, parl==ent==复合过去时 ai parlé, as, a, avons, avez, ==ont== 未完成过去时 parlais, parlais, parlait, par==lions==, parliez, par==laient== | 跟 ais, ais, ait, ions,iez, aient 愈过去时 avais parlé, avais, avait, ==avions==, aviez, a==vaient== (avoir 的未完成) 将来时 parlerai, parleras, ==parlera==(never at), parl==erons==, parlerez, par==leront== | 加 r | 跟 ai, as, a, ons, ez, ont 虚拟式 parle, parles, parle, parlions (同未完成), parliez(同未完成), parlent 条件式 parlerais, parlerais, parlerait, parlerions, parleriez, par==lerait== | 加 r,跟未完成 现在时 parlant特殊:avançons. mangeons. nettoie, paie, peser -> pèse. | appeler -> appelle.第二组 finir 词根 fini|rfinis, finis, finit, finissons, finissez, fini==ssent== 复合过去时 ai ==fini==... (not finis) 未完成过去时 fini==ssais==, finissais, finissait, finissions, finissiez, finissaient | ==加 ss==,跟常规 愈过去时 avais fini.. 将来时 fini==rai==, finiras, fini==ra==(not rat), fini==rons==, finirez, fini==ront== | 不加 ss,直接跟 ai 虚拟式 finisse, finisses, finisse, finissions(同未完成), finissiez, finissent 条件式 finirais, finirais, finirait, finirions, fini | 不加 ss & r,直接跟未完成!不规则| rendre | paraître | aller | être | ouvrir | sentir partir sortir | dormir | venir | pouvoir | faire | boire | rire | vivre | | -------------- | ------------------ | ---------- | ------------ | ---------- | -------------------- | ------ | ----- | ------- | ----- | ----- | ---- | ----- | | 词根 rend|re | parai|tre | v | | ==ouvre== | | | | | | | | | | rends | parais | vais | suis | ==ouvres== | | | | | | | | | | rends | parais | vas | es | | | | | | | | | | | rend | paraît | va | est | | | | | | | | | | | rendons | parai==ssons== | ==allons== | sommes | | | | | | | | | | | rendez | parai==ssez== | allez | ==êtes== | | | | | | | | | | | rendent | parai==ssent== | ==vont== | sont | | | | | | | | | | | 复合过去时 | | | | | | | | | | | | | | j'ai rendu | jái ==paru== | | j'ai été | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 未完成过去时 | | | | | | | | | | | | | | je rendais | parai==ssais== | | j'étais | | | | | | | | | | | tu rendrais | 原型已经有 ais,这里大改为 ss | | | | | | | | | | | | | il rendrait | | | | | | | | | | | | | | nous rendions | | | | | | | | | | | | | | vous rendiez | | | | | | | | | | | | | | ils rendaient | | | | | | | | | | | | | | 愈过去时 | | | | | | | | | | | | | | j'avais rendu | ... | | | | | | | | | | | | | ... | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 将来时 | | | | | | | | | | | | | | je rendrai | ==paraîtrai== | | je ==serai== | | | | | | | | | | | tu rendras | ... | | seras | | | | | | | | | | | il rendra | | | ==sera== | | | | | | | | | | | nous rendrons | | | | | | | | | | | | | | vous rendrez | | | | | | | | | | | | | | ils rendront | <br> | | | | | | | | | | | | | ***虚拟式 *** | | | | | | | | | | | | | | rende | paraisse | | | | | | | | | | | | | rendes | ... | | | | | | | | | | | | | rende | | | | | | | | | | | | | | rendions# | | | | | | | | | | | | | | rendiez# | | | | | | | | | | | | | | rendent## | | | | | | | | | | | | | | 条件式 | | | | | | | | | | | | | | je rendrais | paraîtrais | | sois | | | | | | | | | | | tu rendrais | 保留 tr|e | | | | | | | | | | | | | il rendrait | | | | | | | | | | | | | | nous rendrions | | | | | | | | | | | | | | vous rendriez | | | | | | | | | | | | | | ils rendraient | | | | | | | | | | | | | | 现在分词 | | | | | | | | | | | | | | rendant | paraissant | | | | | | | | | | |

lerobot be like

2025-03-04
0325ardcjulyfunnotes

lerobot be like observation.state action episode_index frame_index timestamp next.done index task_index 0 [0.0, -0.96, 1.16, 0.0, -0.3, 0.0, 0.0, 0.0, -... [0.009203885, -0.9341943, 1.1734953, -0.004601... 0 0 0.00 False 0 0 1 [0.0007582012, -0.9566894, 1.1651634, -0.00142... [0.009203885, -0.9341943, 1.1734953, -0.003067... 0 1 0.02 False 1 0 2 [0.0018032654, -0.9522623, 1.1714675, -0.00530... [0.0076699043, -0.93266034, 1.1734953, -0.0046... 0 2 0.04 False 2 0 3 [0.0026358203, -0.9482949, 1.1752888, -0.00741... [0.009203885, -0.93266034, 1.1750293, -0.00460... 0 3 0.06 False 3 0 4 [0.0034279125, -0.9450332, 1.177441, -0.008036... [0.009203885, -0.93266034, 1.1750293, -0.00460... 0 4 0.08 False 4 0 .. ... ... ... ... ... ... ... ... 195 [0.006011534, -0.11404947, 0.83533436, -0.0294... [-0.009203885, -0.11811652, 0.8360196, -0.0276... 0 195 3.90 False 195 0 196 [0.0040293564, -0.114590585, 0.83659065, -0.02... [-0.009203885, -0.11811652, 0.8360196, -0.0291... 0 196 3.92 False 196 0 197 [0.0023085629, -0.11500274, 0.83785635, -0.030... [-0.009203885, -0.11811652, 0.83755356, -0.029... 0 197 3.94 False 197 0 198 [0.00080802303, -0.115325116, 0.8390446, -0.03... [-0.009203885, -0.11811652, 0.8390875, -0.0306... 0 198 3.96 False 198 0 199 [-0.0004944365, -0.115580015, 0.84037006, -0.0... [-0.009203885, -0.11811652, 0.8406215, -0.0306... 0 199 3.98 False 199 0 `

what-features-should-it-have-f-9s5soB3SSkiy05QCbJ5Frw

2025-03-04
0325ardcjulyfunnotes

To design an API for efficiently uploading large dataset files from mobile devices to a PC server, the following features are essential based on industry best practices and technical requirements:Core Features1. Resumable UploadsAllow uploads to pause and resume automatically after network interruptions, avoiding restarts. Critical for mobile environments with unstable connections[1][4].Implement session tracking (e.g., unique upload IDs) to manage interrupted transfers[1][7].2. Chunked File TransferSplit large files into smaller chunks (e.g., 100 MB each) to:Reduce memory strain on servers and clients[1][2].Enable retries of failed chunks without resending the entire file[5].Use multipart/form-data encoding for efficient chunk assembly[2][5].3. Streaming SupportProcess files as they are uploaded (client-to-server streaming) to avoid buffering entire datasets in memory[1][2].Example: Use Node.js createReadStream or .NET Request.Body streaming[1][2].4. Cloud Storage IntegrationDirectly upload files to cloud storage (e.g., AWS S3, Azure Blob) via pre-signed URLs to offload server processing[5][8].Reduce API latency by separating file uploads from metadata handling[3][8].5. CDN and Geographic OptimizationRoute uploads to the nearest CDN edge location (e.g., AWS Transfer Acceleration) to minimize latency[1][4].Ensure global users experience consistent speeds[1][4].Performance and Reliability6. Error Handling and LoggingImplement robust error logging to diagnose failures (e.g., network timeouts, corrupted chunks)[2][5].Validate checksums (e.g., MD5, SHA-256) for data integrity[1][5].7. Rate Limiting and ThrottlingPrevent server overload by limiting concurrent uploads or bandwidth per client[2][5].Use asynchronous processing for heavy workloads (e.g., Hangfire)[2].8. Timeout ManagementAdjust server and client timeouts to accommodate large transfers[2][5].Use keep-alive signals to maintain active sessions[7].Security9. Secure TransfersEnforce HTTPS for encrypted data transmission[1][4].Use token-based authentication (e.g., OAuth 2.0) to control access[4][8].10. Access ControlsRestrict upload permissions via roles (e.g., admin, user)[1][4].Validate file types and sizes to prevent malicious uploads[8].User Experience11. Progress TrackingProvide real-time upload progress (e.g., percentage completed) to users[4][5].Send email/SMS notifications on success or failure[4].12. Client-Side SDKsOffer mobile SDKs (iOS/Android) to simplify integration:Automatic chunking and retries[1][4].Network optimization (e.g., Wi-Fi vs. cellular)[5].13. CompressionEnable optional on-device compression (e.g., ZIP) to reduce transfer sizes[5].Scalability14. Load BalancingDistribute upload requests across multiple servers to handle high traffic[1][8].Use auto-scaling to adjust capacity dynamically[4].15. Metadata SupportAttach custom metadata (e.g., timestamps, device info) to files during upload[8].By combining these features, the API will ensure fast, reliable, and secure large file transfers from mobile devices, even in low-bandwidth environments. Solutions like Uploadcare[1] or TransferNow[4] provide prebuilt infrastructure, while custom implementations can leverage AWS S3, resumable protocols[7], and client SDKs for optimal performance.Citations: [1] https://uploadcare.com/blog/handling-large-file-uploads/ [2] https://learn.microsoft.com/en-us/answers/questions/1375143/strategies-for-handling-large-file-uploads-in-a-ne [3] https://intelligentpathways.com.au/enabling-large-file-transfer-with-apis/ [4] https://developers.transfernow.net [5] https://www.reddit.com/r/softwarearchitecture/comments/10v7mo2/how_to_upload_large_files_1gb_through_a_restapi/ [6] https://stackoverflow.com/questions/2276851/large-data-transfer-between-mobile-app-and-a-server/2276888 [7] https://developers.google.com/android-publisher/upload [8] https://terem.tech/api-file-upload-best-practice/ [9] https://blog.xapihub.io/2023/12/22/Handling-File-Uploads-in-RESTful-APIs.html [10] https://apidog.com/blog/file-upload-in-apis/ [11] https://stackoverflow.com/questions/33889410/proper-way-to-implement-restful-large-file-upload [12] https://stackoverflow.com/questions/26535866/best-approach-to-send-big-files-to-a-server-in-a-automatic-way-using-a-rest-api [13] https://stackoverflow.com/questions/3351742/upload-large-files-on-the-web-server-on-android [14] https://softwareengineering.stackexchange.com/questions/272035/best-practice-for-uploading-large-file-previewing-and-editing-before-saving-to [15] https://blog.stoplight.io/best-practices-for-designing-apis-for-mobile-apps [16] https://www.dropboxforum.com/discussions/101000042/an-actually-useful-guide-on-uploading-large-files-via-api/555797 [17] https://terem.tech/large-files-apis-lessons-learnt/ [18] https://developers.google.com/drive/api/guides/manage-uploads [19] https://community.openai.com/t/uploading-large-files/14857 [20] https://github.com/immich-app/immich/discussions/1674来自 Perplexity 的回答: pplx.ai/shar

法语

2025-03-03
0325julyfunnotes

ravi tendance derniereaborder 涉及 facette 方面il semble voyez l'IA evoluer disponible avenir intergree pourriez-vous chacun outil assistant virtueltout a fait avancee 进展Bonjour je suis ravi de discuter avec vous. Pensez-vous que l'^age de vos enfants est une facteur important en d'ecider de les emmener 带走 en vacances?amener 带来 expose ... \a cependant pr'eoccupation 担心 inqui\ete s'ecurit'e sant'e bien pens'e primordiales 首要的 prevoir 准备 des collations saines 健康零食 point de vue effctivement 的确 r'eduire le co^urs moins souvent de meni\ere plus qualitative Je disais ville 礼物 cadeau strat'egie目的地 destinationsignificativementles co^utstout en offrant de belles exp'erience 同时提供美丽风景购物 d'achatprivil'egier 优先选择metter l'accent surplanifier 计划prochainement 即将弟弟妹妹 fr\ere et soeurprender le train \a grande vitesseen train\a la fois 同时agr'eable 愉快une destination en t^ete 脑海中enrichir leur exp'erienceasseyez-vous 坐下je m'assoisramer sur un bateau 划船magnifiquefacile d'acc\esvisage 景色excursion 游览enrichissant 丰富envisagez-vous? 考虑une crosi\ere courte ou une excursion d'une journ'ee 短途航行 / 一日游m^eme \a jeune ^agej'estime important 我认为ca d'epend du but du voyageobligation porter secteur cette pratique suscite de débat

[deprecated]

2024-12-13
1124julyfunnotes

setupref: https://hackmd.io/@jimmy801/docker_gui# [deprecated] docker run -it -h $(hostname) -e DISPLAY=$DISPLAY -e XAUTHORITY=/tmp/xauth -v ~/ws/docker2:/home -v ~/.Xauthority:/tmp/xauth -v /tmp/.X11-unix:/tmp/.X11-unix --net=host -d ros:humble-ros-base-jammy # then after committing: docker run -it -h $(hostname) --device=/dev/ttyUSB0 -e DISPLAY=$DISPLAY -e XAUTHORITY=/tmp/xauth -v ~/ws/docker2:/home -v ~/.Xauthority:/tmp/xauth -v /tmp/.X11-unix:/tmp/.X11-unix --net=host -d new1# [ex] useradd -m -s /bin/bash -u 1000 julyfun usermod -aG sudo julyfun sudo passwd julyfun su julyfunref: https://github.com/waveshareteam/roarm_ws_em0.gitsudo apt update sudo apt install -y software-properties-common sudo apt install -y net-tools sudo apt install -y ros-humble-moveit-* sudo apt install -y ros-humble-foxglove-bridge sudo apt autoremove ros-humble-moveit-servo-* sudo apt-get install libopenblas-devDocker usagedocker exec -u julyfun -it 7f bas

how-to 服务器维护日志

2024-09-25
0724julyfunnotes

how-to 服务器维护日志25.3.14[ok]bash sudo bash start2.sh proxy_on12.25又挂了。[ok] 重进 dashboard 的时候记得:在`API Base URL`一栏中输入:`http://<ip>:10050`,在`Secret(optional)`一栏中输入 启动成功后输出的Secret。10.20最近又挂了,不得不重新开放 external 端口在阿里云开放自定义端口删除 clash-for-linux-backup 中的 conf/config.yaml重新 sudo bash start.sh修改 conf/config.yaml 中的 external 端口sudo bash restart.sh source /etc/profile.d/clash.sh proxy_on访问 10050 看看[240205] 按照上述方法 ok。我还修改了 start.sh 使之可以读取本地文件.7.31土豆服务器上白天 clash 经常莫名其妙挂了,每次手动重启。晚上一看又挂了,写了个脚本自动重启,结果直接把服务器 cpu 干爆了。以为是 clash-for-linux 仓库的问题,拉了 clash-core 和 clashmeta 来测测,还是会干爆。发现新工具 gg, https://github.com/mzz2017/gg?tab=readme-ov-file 当时没外网拉不下来,以后测测clash core log 有一堆脏东西:翻来覆去问论坛,最后问 gpt4 是什么流量回环还是公网 ip 攻击,他说 ip 是乌克兰的,建议查查防火墙。想起来之前为了做 Rustdesk 服务器,把所有端口都开了,所以回去把端口都关了,就剩 22 和 3389Done! clash 又正常了,所以你才能看到这篇博客。所以这是被攻击了吧。xy 说给 9090 端口设置密码就行。不过我已经把端口关了。或许昨天白天不是 clash 挂了而是节点挂了,晚上是设置过于简单密码才被轰炸的。果真如此的话还是得开 9090 端口去选节点

moveit2-错误修复日志

2024-09-25
0724julyfunnotes

7.30 启动双机械臂报错一大堆关节找不到,可以 Plan 不能 Execute重启电脑解决。8.2 update: 重启 wsl 即可。有一个机械臂的 urdf 如何配置双机械臂众所周知 moveit setup assistant 输入 urdf 输出所有配置文件。所以你需要修改你原有的 urdf:所有 joint 和 link 加上 left_ 前缀,再复制 <robot> 标签内的所有内容,所有 joint 和 link 加上 right_ 前缀,两机械臂相对位置用 world_to_(left/right)_base 表示。接下来用 setup assistant 就行了。官网教程让你手动改输出的配置文件,太蠢了。verified on 24.7.29启动带 MoveitGroupInterface 节点是报错 runtime error: can't load urdf..launch 文件里面别乱传参数,删除 parameters = xxx.urdf 解决了此问题tf 查找不到一个显然存在的 frametf 查找别放在构造函数里,解决。buffer & listener 所在 node 必须 spinjoint angles 0.000000s现在直接跑 demo.launch.py + hello_moveit 并不会报这个错了,能顺利规划和执行但是跑别的报这个错还是不知道应该是因为 spin 的位置,当前节点无法与其他节点通信导致的启动节点但是 nothing happens是忘记注册 rclcpp_register_component_node 了,或者 add_library 没有 add 对应的源文件7.15 win 蓝牙没了去 ubuntu 下 rmmod modprobe,修好了之前 hello_moveit plan 后关节没法移动的原因是有节点冲突,重启电脑解决包带 moveit,编译报错,找到了 /mnt (msys2 的) 相关问 chat cmake 用什么环境变量,给了个 bash 输出输出 $PATH 发现带有 /mnt 和 /网上搜 wsl 如何关闭共享 win 环境变量解

光速搭建带有图床的博客

2024-09-25
0724julyfunnotes

搭建主站ref: https://juejin.cn/post/7134899224985993230如果没有安装 bun 你就 curl -fsSL https://bun.sh/install | bashfork https://github.com/moeyua/astro-theme-typographygit clone your fork 并在仓库中 bun install在 src/content/posts 中修改文章在仓库根目录 bun dev run 本地查看站点(热更新)git push 到你的 fork在 vercel.com 的 dashboard 中 Import git repo,部署时注意有些选项需要修改为 bun run build 和 bun install修改成喜欢的域名,提供 julyfun.vercel.app 这种免费域名的(可选)vercel.app 被墙了,可配置国内域名在阿里云之类的地方买一个域名使用 cloudflare DNS, see: https://bbs.maozhishi.com/d/56-cloudflare给 vercel 配置域名, see: https://blog-zoey.top/posts/vercel-dns-china托管于非中国内地服务器的网站无需进行ICP备案。ref: https://help.aliyun.com/zh/icp-filing/basic-icp-service/product-overview/icp-filing-requirements-for-a-regular-website(可选)搭建图床ref: https://zhuanlan.zhihu.com/p/119250383备份另一份 ref: https://cloud.tencent.com/developer/article/2067043参照 ref 搭建腾讯云 + PicGO 图床建议在 PicGO 中下载 webp 插件,上传时压缩图片随后你可以在 obsidian 中下载 image auto upload plugin 自动上传到图床verified this part on 24.9.10how-to如果最后访问域名显示重定向次数过多,在第二个链接 🔗 里说了需配置 SSL - strictverified on 24.7.2

comptime? runtime? launchtime!

2024-09-25
0824julyfunnotes

comptime? runtime? launchtime!考虑参数的修改和加载:| time | 例子 | 修改数值代价 | 修改参数名代价 | 运行代价 | | -------------------------------- | -------------------- | --------------- | --------------- | -------------------------------------- | | comptime 编译时常量 | constexpr | 重新编译 + 运行 | 重新编译 + 运行 | 无 | | launch time / init time 参数文件 | ros2 param yaml file | 重新运行 | 重新编译 + 运行 | 启动时几毫秒 | | runtime 热加载 | ros2 param set | 无 | 重新编译 + 运行 | 启动时几毫秒,每次查询几十纳秒到几微秒 |参数表如果是一个 string => value 的 map,那么查询较长的名字比较耗费时间和空间。这其实可以在 comptime 进行优化,然而 C++ / Rust 怎么实现呢?btw,宏可以实现这个编译时的抽象,但是很难保证热加载灵活性。Zig 应该很好实现编译时字符串压缩。如果做一个跨平台 GUI,肯定要做抽象层。如果采用的是 Box<dyn Trait> 或者抽象类这种方案,就是 runtime 抽象,必然有一定性能损失。然而这些抽象如果在 comptime 做,应该可以让损失非常小,编译结束时即可消除抽象,近乎直接生成平台原生代码。元编程可以做到以上所有事情,它本身就是 comptime 的抽象,然而基于 AST 的元编程太过底层,lsp 难以发挥作用,开发和维护成本都很高。也许 Zig 能代替元编程轻松做到代码生成,有空玩玩。每次想到这个就为 Rust 的 comptime 能力感到遗憾

不同文档博客的标记语法

2024-09-25
0824julyfunnotes

不同文档博客的标记语法github 标准> [!NOTE] > > Markdown heremkdocs material!!! note "Title" Markdown hereobsidian```ad-note Markdown here ```readthedocs.. note:: Markdown hereastro starlight:::tip Because Starlight is beta software, there will be frequent updates and improvements. Be sure to update Starlight regularly! :::就没两个一样的,叫我如何是好。并且搜索功能都奇差,index 对中文非常不友好,github 和 material 矮子里面拔长子。还不如 grep -rn ...所以软件们都自己做博客框架。每过几年总要迁移的,算了,人生苦短!Markdown 的不同方言之间用 python 脚本迁移也不难。I write articles to:软件用法和报错解决: 公开 SEO 友好,可贡献,可反馈(赞踩评论),可搜索,需树形课堂笔记: 介于 how-to 和生活之间:公开 SEO 友好,可搜索,SEO 友好,需树形记录生活感想和技巧,制定长期规划:公开 - 更近似于个人博客浏览到有用的文章存个链接:公开,可搜索不幸的是,有的文章介于生活和工作之间,比如随手修了一个服务器 bug,这个或许是可复现的。另外 how-to 目前就像我的个人博客捏。另外:私人备忘录(这个肯定要用手机备忘录)what i want页面元素类似于 github markdown 即可,最好支持 > [!NOTE] 和折叠要快,搜索也要快树形目录个人网站而不是集成网站,以利于被搜索到支持集成 ai,最好可定制化程度高类似 astr

引号的滥用

2024-09-25
0824julyfunnotes

我以前写的题解和某些公众号现在写的文章中,就有引号的滥用。例如:所以我们唯一要担心的就是同一个合数是否会被“另外某数 × p"以外的质数”再筛一次导致浪费时间。想要求出“第二站上下车到底有多少人”需要一些计算我当时只是想提高可读性才加的引号,并没有想过它为何能提升可读性。这里的引号的语义作用到底是什么?小学老师说引号作用是引用或着重标记,但此处并不是。我们说出或写出的语言,由于时间流动的单向和人类阅读的单线程,形式只能是一个序列。然而其含义其实是树形的,就和编译器的词法分析和 latex 等标记语言类似。试将本文第一句话表示为树形:(((我)((以前)写)的题解)中((就)有)((引号)的滥用))不论是听还是看文字,理解文字的过程隐含了树形的语法分析,理解的依据就是语言的语法习惯。然而中文并不是一个特别擅长讲语义进行良好结构化的语言——由于缺少从句和后置定语,中文语句可能比英文语句嵌套层数更深:You should understand the requirements that are important to customers. 你要理解对顾客而言重要的需求。想要求出“第二站上下车到底有多少人”需要一些计算: It takes some calculation to figure out how many people get on and off at the second station.人类很难理解嵌套层数很深的数据。我们还想出了各种办法来让数据扁平化,比如命令式编程语言中的临时变量。在本文的例子中,为了明示这种树形结构,我才使用了引号。有时候我会使用加粗来明示,和引号作用一致。引号的问题大量引号让文章更难阅读,而且你文章里虽然可以用引号,说话的时候总不能带上吧。为了保证你语言之优雅,我建议别过度依赖引号,而是找一找白话中文里更好的表达方式,比如拆成两个句子。有时候一句话让人难以理解,正是因为嵌套层数太深。为了求出第二站上下车有多少人,我们需要一些额外计算

编码器和执行器科普

2024-09-25
0824julyfunnotes

电机外围线圈(定子)产生的磁场推动内圈磁铁(转子)。如何知道转子角度有感编码器光: 小孔,照射(发光器 + 感光原件)ABZ: https://blog.csdn.net/weixin_43580890/article/details/134404950磁AMR / TMR 直接读磁场的角度,最多约 12 位精度,直接 SPI 通信连接到 MCU 上,用封装好的库就行游标,内码外码道两圈分段磁铁编码,提升精度,和游标卡尺同一个原理,也是有芯片(IC-Haus)通过 SPI 直接给 MCU感旋变:旋转变压器,转子上特殊形态,旋转时不同位置磁导率不一样 => 电压不一样 PCB 式电感编码器: 金属在运动,周边线圈感应涡流的大小无感高频注入法: 此方法主要利用电机自身的非理想特性对电机的转速和位置信号进行估计。主要原理是在电机定子侧注入高频电压或者高频电流信号,注入的高频信号在电机内会形成高频磁场。由于电机具有非理想特性,例如转子结构凸极性、转子饱和凸极性等,这种非理想特性会对高频磁场产生调制作用,使得电机定子侧产生和电机位置和转速相关的高频电压或电流信号,通过提取有效信号和解调制等方式得到电机的转速和位置信息。ref: https://blog.csdn.net/sy243772901/article/details/107780148伺服电机 = 电机 + 编码器 + 控制器 + 驱动器,闭环控制?舵机原理?各种线和接口GPI

第一性原理之为什么 Latex 比富文本更容易编辑和阅读

2024-09-25
0824julyfunnotes

第一性原理之为什么 Latex 比富文本更容易编辑和阅读在富文本中手动移动图片位置的体验不好,而且一般不好看。用 Latex 等语言则可以用标签指定居中等位置。拆解为什么,因为手动移动图片的自由度太高,信息量过大,而这个信息是人类通过鼠标移动没有办法精确控制的。比如手动将图片放到距离左边缘 30% 的位置,这里有用的信息就是距离左边缘 30%,而人手的移动引入了噪声,降低了信噪比。反之用标记语言排版,有两个优点:用 \centering width= 指定信息,随后无方差渲染。 => 阅读时信噪比大,所以美观易读由于信息量比富文本少,不用隐藏任何信息 => 对编辑友好想要在 Word 中高效美观地编辑,则需引入 limitations,减少自由度。比如为图片添加居中等标签。当然富文本编辑器都支持引入这些 limitations。在 Word 中通过鼠标点击加粗或居中等方式,是通过操作鼠标位置这一巨大信息来插入少量信息(即选中的文字两边添加了 bold 标签),所以这方面鼠标的效率会比键盘低。其他杂想我们在生活中习惯于用有方差的身体运动来输出少量信息。因此移动鼠标对于我们来说更容易上手。在编辑文本时,键盘比鼠标输出有效信息的效率更高 <= 键盘具有比手指略大的按键,通过类似于 16-QAM 的方式捕获了方带差的指尖运动, 编码成无方差信息,而鼠标的编码是在按钮这一环节才执行的。而你在 fps 里绝对不想用纯键盘移动视角,这时候鼠标输入信息的有效比增大了,而你的大脑接收视线时可以过滤掉一些噪声的。纯属瞎想。Don't mind these

装机日志

2024-09-25
0924julyfunnotes

引导程序华硕 B650M-K 主板从微软官网下载 win11 iso 镜像,用 Rufus 4.5.1 默认配置烧录启动盘主板 BIOS 设置打开 CSM 模式,CSM 内设置全选“仅 UEFI”。安全启动模式中,操作系统有“其他操作系统”和“Windows UEFI”,选择其他操作系统即可。重启进入安装程序,点击“现在安装”后提示“缺少计算机所需的介质驱动程序” 无法继续安装怎么解决的来着似乎是:进入安装页面,选择完语言后,出现找不到驱动的提示退回安装初始页面,拔下 U 盘换一个插口,再点击安装,就 OK 了ProblemsCSM 中若没有全选 UEFI,可能会出现启动时(非 BIOS)提示请设置为 UEFI,照做即可秘钥我是使用 win11 教育版秘钥激活软件Steam 认为未连接网络,即使开了 VPN?使用 Clash Verge Rev 的服务模式 + TUN MODE服务模式提示没有 vcruntime140.dll?下载安装 VC_redist.x64.exe,我这次是知乎上搜到的链接done

async

2025-06-12
julyfunlang-modelnotes技术学习

大致概念:[80%-sure] 以 Rust 为例,运行到 func().await 时 (func 为 async fn)func() 内部代码完全交由 async runtime 处理func() 内部通常有等待IO/GPU/定时器的异步部分。这些部分不由 CPU 负责运算,不应该让 CPU 干等着,所以才写成异步函数.如果 func() 内部全是同步代码,没有 .await 或手动挂起点,写成异步(async fn)没有实际意义它是不会挂起的,会同步执行完毕。轮询poll 调用次数不是固定的,取决于任务的完成时机和外部事件。Rustasync fn my_async(x: u32) -> u32 { let a = x + 1; a * 2 } let fut = my_async(10); fut.await; // 开始轮询编译器生成的大致逻辑:enum MyAsyncState { Start { x: u32 }, Done, } struct MyAsyncFuture { state: MyAsyncState, } impl Future for MyAsyncFuture { type Output = u32; fn poll(mut self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<u32> { match self.state { MyAsyncState::Start { x } => { let a = x + 1; let result = a * 2; self.state = MyAsyncState::Done; Poll::Ready(result) }, MyAsyncState::Done => { panic!("polled after completion"); } } } }另一个例子:async fn my_async(x: u32) -> u32 { let a = x + 1; tokio::time::sleep(Duration::from_secs(3)).await; a * 2 }enum MyAsyncState { Start { x: u32 }, Waiting { a: u32, sleep_future: Sleep }, Done, } impl Future for MyAsyncFuture { type Output = u32; fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<u32> { loop { match self.state { MyAsyncState::Start { x } => { let a = x + 1; let sleep_future = tokio::time::sleep(Duration::from_secs(3)); self.state = MyAsyncState::Waiting { a, sleep_future }; }, MyAsyncState::Waiting { a, ref mut sleep_future } => { match Pin::new(sleep_future).poll(cx) { Poll::Pending => return Poll::Pending, Poll::Ready(_) => { let result = a * 2; self.state = MyAsyncState::Done; return Poll::Ready(result); } } }, MyAsyncState::Done => { panic!("polled after completion"); } } } }

unit2-02_class_conditioned_diffusion_model_example

2025-06-10
diffusion-models-classjulyfunnotes技术学习

Class-conditioned指的是类别-Conditioned. 或者说 class-label-conditioned.网络输入改成啥样了? 其实就是 concat.Unet 输入通道直接改成了 in_channels=1 + class_emb_sizeforward 其实就是广播 + torch.cat 一下.def forward(self, x, t, class_labels): bs, ch, w, h = x.shape # [pre-defined] self.class_emb = nn.Embedding(num_classes, class_emb_size) class_cond = self.class_emb(class_labels) class_cond = class_cond.view(bs, class_cond.shape[1], 1, 1).expand(bs, class_cond.shape[1], w, h) net_input = torch.cat((x, class_cond), dim=1) # model 返回 ModelOutput. # sample: 就是预测的噪声张量. # additional_residuals: 存储额外残差信息. 一般没用. return self.model(net_input, t).sampl

unit2-01_finetuning_and_guidance

2025-06-10
diffusion-models-classjulyfunnotes技术学习

Generating process:x = torch.randn(4, 3, 256, 256).to(device) for i, t in tqdm(enumerate(scheduler.timesteps)): model_input = scheduler.scale_model_input(x, t) with torch.no_grad(): noise_pred = image_pipe.unet(model_input, t)["sample"] x = scheduler.step(noise_pred, t, sample=x).prev_sampleGuidancex = torch.randn(4, 3, 256, 256).to(device) for i, t in tqdm(enumerate(scheduler.timesteps)): x = x.detach().requires_grad_() model_input = scheduler.scale_model_input(x, t) noise_pred = image_pipe.unet(model_input, t)["sample"] x0 = scheduler.step(noise_pred, t, x).pred_original_sample loss = <custom_loss>(x0) * <guidance_loss_scale> cond_grad = -torch.autograd.grad(loss, x)[0] x = x.detach() + cond_grad x = scheduler.step(noise_pred, t, x).prev_sampleCLIP Guidance with torch.no_grad(): text_features = clip_model.encode_text(text) for i, t in tqdm(enumerate(scheduler.timesteps)): # print(i, t) # (1, tensor(1000)), (2, tensor(980))... model_input = scheduler.scale_model_input(x, t) # DDIM loaded with torch.no_grad(): # image_pipe is loaded by the same name noise_pred = image_pipe.unet(model_input, t)["sample"] cond_grad = 0 for cut in range(n_cuts): x = x.detach().requires_grad_() x0 = scheduler.step(noise_pred,t, sample=x).pred_original_sample loss = <clip_loss>(x0, text_features) * guidance_scale cond_grad -= torch.autograd.grad(loss, x)[0] / n_cuts if i % 25 == 0: print(f"Steps {i} loss: {loss.item()}") alpha_bar = scheduler.alphas_cumprod[i] # `alpha_bar` here is decreasing and works for textures. # Can be changed to some increasing coefficients! x = x.detach() + cond_grad * alpha_bar.sqrt() x = scheduler.step(noise_pred, t, x).prev_sampl

数组

2025-05-27
julyfunkedayanotes工作

C++数组基础知识用法表格| 操作 | 代码示例 | 说明 | | --------------- | -------------------------------------- | ------------------------------------ | | 声明数组 | int a[5]; | 创建一个长度为5的整型数组,未初始化。 | | 初始化数组 | int b[3] = {1, 2, 3}; | 声明时直接赋值,长度可省略:int b[] = {1, 2, 3}; | | 访问元素 | cout << b[0]; | 输出下标为0的元素(第一个元素,值为1)。 | | 修改元素 | b[1] = 5; | 将下标为1的元素改为5。 | | 遍历数组(for循环) | for(int i=0; i<3; i++) cout << b[i]; | 输出所有元素,注意下标从0开始到长度-1。 |应用题及数组写法题目1:输入5个数,输出它们的和#include <iostream> using namespace std; int main() { int a[5], sum = 0; // 输入 for(int i=0; i<5; i++) { cin >> a[i]; sum += a[i]; // 累加 } // 输出 cout << "Sum: " << sum; return 0; }题目2:输出数组中的最大值#include <iostream> using namespace std; int main() { int a[5] = {3, 9, 2, 7, 5}; int max = a[0]; // 假设第一个是最大值 for(int i=1; i<5; i++) { if(a[i] > max) max = a[i]; // 更新最大值 } cout << "Max: " << max; return 0; }题目3:逆序输出数组#include <iostream> using namespace std; int main() { int a[] = {1, 2, 3, 4, 5}; for(int i=4; i>=0; i--) { // 下标从大到小 cout << a[i] << " "; } return 0; }题目4:统计数组中某个数的出现次数#include <iostream> using namespace std; int main() { int a[6] = {2, 3, 2, 5, 2, 1}; int target = 2, count = 0; for(int i=0; i<6; i++) { if(a[i] == target) count++; } cout << "Count of " << target << ": " << count; return 0; }题目5:数组元素翻倍(修改原数组)#include <iostream> using namespace std; int main() { int a[4] = {1, 2, 3, 4}; for(int i=0; i<4; i++) { a[i] *= 2; // 每个元素乘2 } // 输出结果 for(int i=0; i<4; i++) { cout << a[i] << " "; } return 0; }关键提示下标从0开始:a[0]是第一个元素,a[n-1]是最后一个。越界检查:避免访问a[-1]或a[n],可能导致程序崩溃。初始化习惯:局部数组未初始化时值是随机的,建议显式赋值(如int a[5] = {0};)。通过这些例题,学生可以掌握数组的声明、遍历、修改和基本应用。后续可逐步过渡到二维数组或字符串(字符数组)

练习

2025-05-19
julyfunnotesrcore技术学习

UtilsRustSBI 起始代码: https://github.com/rustsbi/rustsbi-qemu/blob/main/rustsbi-qemu/src/main.rs#L146实验中运行的 qemu 是干嘛的?(make run 做了什么)执行步骤:cargo build 编译内核rust-objcopy 将 ELF 格式的内核转换为纯二进制格式 .bin 文件随后 Qemu:qemu-system-riscv64 \ -machine virt \ # 模拟 RISC-V 的 virt 机器 -nographic \ # 无图形界面,使用控制台 -bios rustsbi-qemu.bin \ # 加载 RustSBI 作为 BIOS -device loader,file=os.bin,addr=0x80200000 \ # 将内核二进制加载到指定内存地址 -s -S # 开启调试服务器(-s)并在启动时暂停(-S)QEMU 的职责:硬件模拟:模拟一个 RISC-V 64GC 架构的虚拟计算机启动流程:首先运行 RustSBI (bootloader)RustSBI 会初始化硬件环境然后将控制权转移到内核 (加载到 0x80200000 的 os.bin)调试支持:通过 -s -S 参数:-s:在 1234 端口开启 GDB 调试服务器-S:启动时暂停,等待调试器连接RUST 内核的作用:被加载到内存指定位置 (0x80200000)接收来自 RustSBI 的控制权作为操作系统内核运行,管理硬件资源和提供系统服务内存布局下面图“数据存储器”其实是 Data Memory. image.png|500Qemu 启动流程Step 1:Qemu CPU pc set to 0x1000,执行一些神秘指令,使得待会儿能跳转到 0x80000000:0x0000000000001000 in ?? () (gdb) x/10i $pc => 0x1000: auipc t0,0x0 0x1004: addi a2,t0,40 0x1008: csrr a0,mhartid 0x100c: ld a1,32(t0) 0x1010: ld t0,24(t0) 0x1014: jr t0 # 这里 t0 值已经变成 0x80000000,原理不知 0x1018: unimp 0x101a: 0x8000 0x101c: unimp 0x101e: unimpStep 2: 0x80000000这里是 RUSTSBI,可以理解为 bootloader (硬件启动的引导程序),会执行很多指令,所以实操时在 0x80200000 打了个断点快速过去,见下面输出.SBI 做的事情有: 对部分硬件例如串口等进行初始化.通过 mret 跳转到 payload 也就是 kernel 所在的起始地址。kernel 进行一系列的初始化后(内存管理,虚存管理,线程(进程)初始化等),通过 sret 跳转到应用程序的第一条指令开始执行。0x0000000080000000 in ?? () (gdb) x/10i $pc => 0x80000000: auipc ra,0x2 0x80000004: jalr 834(ra) 0x80000008: auipc ra,0x0 0x8000000c: jalr 116(ra) 0x80000010: j 0x80001690 0x80000014: unimp 0x80000016: addi sp,sp,-80 0x80000018: sd ra,72(sp) 0x8000001a: ld a1,40(a0) 0x8000001c: ld a2,32(a0)Step 3: 0x80200000 自己的 Rust 程序:(gdb) x/5i $pc => 0x80200000: li ra,100 0x80200004: unimp 0x80200006: unimp 0x80200008: unimp 0x8020000a: unimpWhat is RustSBI?[from comment] SBI 是 RISC-V Supervisor Binary Interface 规范的缩写,OpenSBI 是RISC-V官方用C语言开发的SBI参考实现;RustSBI 是用Rust语言实现的SBI。BIOS 是 Basic Input/Output System,作用是引导计算机系统的启动以及硬件测试,并向OS提供硬件抽象层。机器上电之后,会从ROM中读取引导代码,引导整个计算机软硬件系统的启动。而整个启动过程是分为多个阶段的,现行通用的多阶段引导模型为:ROM -> LOADER -> RUNTIME -> BOOTLOADER -> OSLoader 要干的事情,就是内存初始化,以及加载 Runtime 和 BootLoader 程序。而Loader自己也是一段程序,常见的Loader就包括 BIOS 和 UEFI,后者是前者的继任者。Runtime 固件程序是为了提供运行时服务(runtime services),它是对硬件最基础的抽象,对OS提供服务,当我们要在同一套硬件系统中运行不同的操作系统,或者做硬件级别的虚拟化时,就离不开Runtime服务的支持。SBI就是RISC-V架构的Runtime规范。BootLoader 要干的事情包括文件系统引导、网卡引导、操作系统启动配置项设置、操作系统加载等等。常见的 BootLoader 包括GRUB,U-Boot,LinuxBoot等。而 BIOS/UEFI 的大多数实现,都是 Loader、Runtime、BootLoader 三合一的,所以不能粗暴的认为 SBI 跟 BIOS/UEFI 有直接的可比性。如果把BIOS当做一个泛化的术语使用,而不是指某个具体实现的话,那么可以认为 SBI 是 BIOS 的组成部分之一。练习应用程序在执行过程中,会占用哪些计算机资源?占用 CPU 计算资源(CPU 流水线,缓存等),内存(内存不够还会占用外存)等请用相关工具软件分析并给出应用程序A的代码段/数据段/堆/栈的地址空间范围。readelf -all ch1-6_1 | nvim # 输出 Section Headers: [Nr] Name Type Address Offset Size EntSize Flags Link Info Align [ 0] NULL 0000000000000000 00000000 0000000000000000 0000000000000000 0 0 0 [ 1] .interp PROGBITS 00000000000002e0 000002e0 000000000000001c 0000000000000000 A 0 0 1 [ 2] .note.ABI-tag NOTE 00000000000002fc 000002fc 0000000000000020 0000000000000000 A 0 0 4 [ 3] .note.gnu.bu[...] NOTE 000000000000031c 0000031c 0000000000000024 0000000000000000 A 0 0 4 ... # 解释列解释:[Nr]: 节的编号。Name: 节的名称。Type: 节的类型。Address: 节在内存中的地址。Offset: 节在文件中的偏移量。Size: 节的大小。EntSize: 节中每个条目的大小(如果适用)。Flags: 节的标志,描述了节的属性。Link: 与该节相关的另一个节的编号。Info: 依赖于节类型的额外信息。Align: 节的对齐方式。行解释:[ 0]: 这是 NULL 节,每个 ELF 文件都有一个 NULL 节,它不占用空间,主要用于对齐和占位。Type: NULLAddress: 0x0000000000000000Offset: 0x00000000Size: 0x0000000000000000Flags: 0 (没有标志)Link: 0Info: 0Align: 0[ 1] .interp: 这个节包含程序解释器的路径名,通常是动态链接器。Type: PROGBITSAddress: 0x00000000000002e0Offset: 0x000002e0Size: 0x000000000000001c (28字节)Flags: A (可分配的)Link: 0Info: 0Align: 1还可以:cat /proc/[pid]/maps,因为 应用程序的堆栈是由内核为其动态分配的,需要在运行时查看。** 为何应用程序员编写应用时不需要建立栈空间和指定地址空间?应用程度对内存的访问需要通过 MMU 的地址翻译完成,应用程序运行时看到的地址和实际位于内存中的地址是不同的,栈空间和地址空间需要内核进行管理和分配。应用程序的栈指针在 trap return 过程中初始化。此外,应用程序可能需要动态加载某些库的内容,也需要内核完成映射。请用相关工具软件分析并给出应用程序A的代码段/数据段/堆/栈的地址空间范围。请用相关工具软件分析并给出应用程序A的代码段/数据段/堆/栈的地址空间范围

题解

2025-02-22
feb25julyfunnotesusaco工作

题意概述给定偶数 n 和一个 n * n 的 01 网格,将其平分为上下左右四个象限,每次操作可以翻转一个网格的元素。求最少需要多少次操作使得四个象限镜像对称(每两个相邻的象限中的 01 网格关于它们相邻的那条轴对称). 此外还会有 m 次询问,每次询问翻转一个坐标,求翻转后的最少操作次数。解题思路我们找到成对的镜像对称格子,每对是 4 个格子(例如整个网格左上角,左下角,右上角,右下角就是一对),我们的目标是将每对格子变为全 0 或全 1。可以统计每对格子当前有多少个 0 和 1,然后取最小值即可。对于询问,我们可以直接更新对应的网格对,然后重新计算即可。复杂度 O(n^2)。题意概述给定 N 个数(N 不超过 200000,每个数范围 0 ~ N),每次操作可以将其中一个数修改为任意非负整数。对 0 ~ N 中的每一个 i,求最少操作几次可以使整个数列的 mex 为 i。一个数列的 mex 指的是最小的未出现过的非负整数.解题思路如果数列 mex 为 i,则 0 ~ i - 1 的每一个数都出现过,且 i 没有出现过. 对于每个 i,我们统计 0 ~ i - 1 中有几个数没有出现过(表示有几个空位需要填),再统计 i 出现了几次(这几个 i 都必须修改为其他数)。由于可以拿 i 来填充前面空位,所以两者的较大值就是答案.题意概述一种编程语言有 REP 和 PRINT 两种语句,其中 PRINT X 可以输出 X,REP 可以重复执行一系列语句,也可以嵌套,类似于 C++ 和 Python 的 for 循环。给定 N <= 100, K <= 3,以及 N 个 1 ~ K 的整数,求是否可以使用 K 个以内的 PRINT X 语句 (1 <= X <= K) 和任意多个 REP 语句组成程序来输出这 N 个数。共有 T 组询问 (T <= 100)。解题思路如果 K = 1,必可以输出。否则我们可以先判断整个序列是否有循环节,找到其中最短的循环节 S,则 S 中不含任何循环节。接下来如果循环节内部有 3 种数字,则 1,2,3 中必然有一个数只存在于 S 前面连续的一段或者后缀连续的一段。我们将连续的一段排除,递归判断剩下的部分(剩下部分只有两个数)。如果循环节内部有 2 种数字,则需要分类讨论。如果 K = 2,则 S 必然是 111222... 或者 222111.. 这种形式。如果 K = 3,则可能有 1212222 这种形式(即包含两个循环节 12 和额外输出的 222,这也满足 3 个 PRINT)。我们可以暴力删除连续 1 或 2 的前缀或后缀,再递归判断剩下部分即可

250112

2025-02-09
julyfunnoteswilliam工作

https://usaco.org/index.php?page=viewproblem2&cpid=1303思路: 题目中有提到,一头牛总是有可能在所有牧场之间穿梭,也就是说一头牛从任意一个放牧地点出发,都能在所有牧场之间穿梭。 那么考虑将每次吃草事件按 t 从小到大排序。一头牛的不在场证明成立,仅当它无法在所有牧场与自己的不在场证明地点之间穿梭。假设某头牛在第 $t_i$ 时刻有不在场证明,离 $t_i$ 最近且早于 $t_i$ 的吃草事件的时刻为 $k_1$,离 $t_i$ 最近且晚于 $t_i$ 的吃草事件的时刻为 $k_2$。分析一下会发现,只要它不可能在 $(t_i-k_1)$ 的时间内从上一次吃草事件发生地点赶到不在场证明地点,或不可能在 $(k_2-t_i)$ 的时间内从不在场证明地点赶到下一次吃草事件发生地点,它的不在场证明就成立。 那么问题就变成了,找到比不在场证明时间早的最晚发生的吃草事件。因为吃草事件已经按发生顺序排序,所以这次吃草事件的下次吃草事件就是比不在场证明时间晚的最早发生的吃草事件。该如何找到这次吃草事件呢?可以很容易地想到二分。那么问题也就迎刃而解了。参考 C++ 版本#include <bits/stdc++.h> using namespace std; typedef long long ll; int g,n,ans; struct point { ll x,y,t; friend bool operator <(const point tmp1,const point tmp2) { return tmp1.t<tmp2.t; } }; point p[100005]; ll tim[100005]; bool check(int i,ll t,ll x,ll y) { return (x-p[i].x)*(x-p[i].x)+(y-p[i].y)*(y-p[i].y)<=(t-p[i].t)*(t-p[i].t); } int main() { scanf("%d%d",&n,&g); for(int i=1;i<=n;i++) scanf("%lld%lld%lld",&p[i].x,&p[i].y,&p[i].t); sort(p+1,p+1+n); for(int i=1;i<=n;i++) tim[i]=p[i].t; for(int i=1;i<=g;i++) { ll x,y,t; scanf("%lld%lld%lld",&x,&y,&t); int pos=lower_bound(tim+1,tim+1+n,t)-tim; if(pos==1) ans+=check(pos,t,x,y)?1:0; else if(pos-1==n) ans+=check(pos-1,t,x,y)?1:0; else ans+=(check(pos,t,x,y)&&check(pos-1,t,x,y))?1:0; } printf("%d\n",g-ans); return 0; }https://usaco.org/index.php?page=viewproblem2&cpid=1087由于每次询问都会不染其中的一段区间,可以考虑使用前缀、后缀记录答案的方法来预处理数据。 预处理方法: 使用数组 ans(i) 记录第 i 位需要多少次染色。 使用数组 v[i] 记录之前是否有第 i 个字母出现。 假设当前字符串为 "ABAB"。 对于每个位置 i 进行处理: 当 i = 1 时,v('A') == 0,ans(1)++,v('A') = 1 (赋值)。 当 i = 2 时,v('B') == 0,ans(2)++,v('B') = 1。 当 i = 3 时,v('A') == 1,ans(3) 不变(可以从上一个 'A' 继续延伸)。 当 i = 4 时,发现一个问题,上一个 'B' 不能延续下来,因为中间有一个 'A'。https://usaco.org/index.php?page=viewproblem2&cpid=1351首先没有出现过的编号是一定可以分配相同的,这一部分要先记上。 之后问题转化为一个环可以移动若干位,求和另一个环对应位置相同的最多个数。 直接枚举环移动的位数暴力判断是 O (n²) 的,考虑优化这个过程。 编号是一个排列,所以环内元素两两不同,则第一个环内一个数至多对应第二个环中的一个数。求出第一个环的每个数要向右平移多少位才能和第二个环对应相同,取最大值即可。 要正反做一遍,因为可以翻转方向

枚举每个二维点

2025-01-04
julyfunnoteswilliam工作

# [USACO19JAN] Icy Perimeter S冰淇淋的面积用dfs很好求只要算出每个联通块中'#'的个数即可难点在于求联通快的周长观察一下样例 发现周长就是每个'#'周围'.'或超过边界的方块个数解决这一问题后这道题几乎就是一道dfs裸题了Part 1 求出最大连通块面积读入 n dir = [(0, 1), (0, -1), (1, 0), (-1, 0)] a 数组从 1, 1 开始,存储 (i, j) 是 '#' 还是 '.' 二维数组 vis = (n + 10) * (n + 10) 的数组表示 i, j 是否访问过 q = deque() # 枚举每个二维点 for i in range(1, n + 1): for j in range(1, n + 1): if i, j 没有访问过, # [todo] 还需要求出最大联通块的面积 area = 0 q.append((i, j)) while len(q): u = q.popleft() # 例如 u = (5, 7) area += 1 for d in dir: # 怎么拿出 d 里面的第一个元素和第二个元素? v = (u[0] + d[0], u[1] + d[1]) if 1 <= v[0] <= n and 1 <= v[1] <= n and a[v[0]][v[1]] == '#' and not vis[v[0]][v[1]]: q.append(v)读入 n dir = [(0, 1), (0, -1), (1, 0), (-1, 0)] a 数组从 1, 1 开始,存储 (i, j) 是 '#' 还是 '.' a = [] for i in range(n): a.append(' ' + input()) vis = [[0] * (n + 1) for _ in range(n + 1)] q = deque() # 枚举每个二维点 for i in range(1, n + 1): for j in range(1, n + 1): if not vis[i][j]: # [todo] 还需要求出最大联通块的面积 area = 0 q.append((i, j)) while len(q): u = q.popleft() # 例如 u = (5, 7) area += 1 for d in dir: # 怎么拿出 d 里面的第一个元素和第二个元素? v = (u[0] + d[0], u[1] + d[1]) if 1 <= v[0] <= n and 1 <= v[1] <= n and a[v[0]][v[1]] == '#' and not vis[v[0]][v[1]]: q.append(v) n = 读入整数 a = [] for _ in range(n): a.append(input()) vis = 全是 False 的 n * n 的二维数组 dir = [(0, 1), (1, 0), (-1, 0), (0, -1)] def dfs(x, y): global area area += 1 vis[x][y] = True # 走过了 for dx, dy in dir: tx, ty = x + dx, y + dy # 要到达的点 # tx, ty 必须没走过 if 0 <= tx <= n - 1 and 0 <= ty <= n - 1 and a[tx][ty] == '#' and not vis[tx][ty]: # 合法 dfs(tx, ty) max_area = 0 for i in range(n): for j in range(n): if not vis[i][j]: area = 0 dfs(i, j) print(area)Problem 3. Problem 1. Marathon这道题目是一道动规的题目。令f[i][j]代表到了第i个检查点,跳过了j个的最短距离。f[i][j]=min(f[i-l-1][j-l]+dis(i,i-l-1))复杂度为 O(n^3)课堂总结dfs 完

课堂总结

2024-12-28
241224julyfunnoteswilliam工作

博弈论:博弈双方都试图最大化自己的分数,先手在进行决策时,要考虑后手的所有可能操作,后手将会最小化先手的分数,而先手 要从最小化的各种方案中选择最大的。 部分博弈论可转换为贪心问题,在已知先手 / 后手策略必定满足某些条件的情况下,比如第一题先手必然选择连续的一段,则后手最小化这连续的一段即可。第三题思路: 我们放上所有强制放的传送带 然后判断最后一天有哪些活格子 首先让整个网格周围的一圈设为活格子 然后从这些活格子开始进行 bfs x -> y 其中 y 是活格子 必须满足 x 上的传送带是 R 所以想从 y 搜到 x,必须要 x 上的传送带是 y -> x 的反方向 每天拿走一个传送带 判断这个传送带是死格子且四周有活格子 如果成立,我们就从这个传送带反向 bfs, 把 bfs 到的格子全部设置为活格子 输出活格子数量

10.4.bahdanau-attention

2024-12-22
d2ljulyfunnotes技术学习

class Seq2SeqAttentionDecoder(AttentionDecoder): def __init__(self, vocab_size, embed_size, num_hiddens, num_layers, dropout=0, **kwargs): super(Seq2SeqAttentionDecoder, self).__init__(**kwargs) self.attention = d2l.AdditiveAttention( num_hiddens, num_hiddens, num_hiddens, dropout) self.embedding = nn.Embedding(vocab_size, embed_size) self.rnn = nn.GRU( embed_size + num_hiddens, num_hiddens, num_layers, dropout=dropout) self.dense = nn.Linear(num_hiddens, vocab_size) def init_state(self, enc_outputs, enc_valid_lens, *args): # outputs的形状为(batch_size,num_steps,num_hiddens). # hidden_state的形状为(num_layers,batch_size,num_hiddens) outputs, hidden_state = enc_outputs return (outputs.permute(1, 0, 2), hidden_state, enc_valid_lens) def forward(self, X, state): # enc_outputs的形状为(batch_size,num_steps,num_hiddens). # hidden_state的形状为(num_layers,batch_size, # num_hiddens) enc_outputs, hidden_state, enc_valid_lens = state # 输出X的形状为(num_steps,batch_size,embed_size) X = self.embedding(X).permute(1, 0, 2) outputs, self._attention_weights = [], [] for x in X: # query的形状为(batch_size,1,num_hiddens) query = torch.unsqueeze(hidden_state[-1], dim=1) # context的形状为(batch_size,1,num_hiddens) context = self.attention( query, enc_outputs, enc_outputs, enc_valid_lens) # 在特征维度上连结 x = torch.cat((context, torch.unsqueeze(x, dim=1)), dim=-1) # 将x变形为(1,batch_size,embed_size+num_hiddens) out, hidden_state = self.rnn(x.permute(1, 0, 2), hidden_state) outputs.append(out) self._attention_weights.append(self.attention.attention_weights) # 全连接层变换后,outputs的形状为 # (num_steps,batch_size,vocab_size) outputs = self.dense(torch.cat(outputs, dim=0)) return outputs.permute(1, 0, 2), [enc_outputs, hidden_state, enc_valid_lens] @property def attention_weights(self): return self._attention_weight

Cow Frisbee S

2024-12-21
241221julyfunnoteswilliam工作

Cow Frisbee S维护一个单调栈,每进入一个数 ai​,就向前扫描直到遇见一个 s_top​>ai​,由于有 ai​ 挡着,所以之后的我们全部都看不见,此时最终答案加上 (i−stop+1)。from collections import deque MAXN = int(1e6) n = 0 ans = 0 a = [0] * (MAXN + 1) s = deque() n = int(input()) for i in range(1, n + 1): a[i] = int(input()) for i in range(1, n + 1): while s and a[s[-1]] < a[i]: ans += i - s[-1] + 1 s.pop() if s: ans += i - s[-1] + 1 s.append(i) print(ans)P2997 [USACO10NOV] Banner Shttps://www.luogu.com.cn/problem/P2997平面上有(0,0)到(n,m)的(n+1)*(m+1)个点。问有多少点对所连的线段不过其他点,且长度在[l,h]范围内枚举 dx, dy, dx 与 dy 互质即可。def gcd(a: int, b: int): return b if a % b == 0 else gcd(b, a % b) n, m, l, r = map(int, input().split()) answer = 0 for i in range(1, n + 1): for j in range(1, m + 1): if gcd(i, j) == 1 and l * l <= i * i + j * j <= r * r: answer += 2 * (n - i + 1) * (m - j + 1) if l == 1: answer += n * (m + 1) + (n + 1) * m print(answer)# [USACO19JAN] Icy Perimeter S冰淇淋的面积用dfs很好求只要算出每个联通块中'#'的个数即可难点在于求联通快的周长观察一下样例 发现周长就是每个'#'周围'.'或超过边界的方块个数解决这一问题后这道题几乎就是一道dfs裸题了2, 3 is ok(0 , 0) (6, 9) 判断所有的 dx, dy 是否满足互质,如果是互质就可以选择W * H 插满杆子 dx = 2, dy = 3def gcd(a, b): if b == 0: return a return gcd(b, a % b) gcd(a=60, b=24) return 12 -> gcd(24, 12) return 12 -> gcd(12, 0) return 12(2, 3)for dx in range(0, W): for dy in range(0, H): 判断 dx, dy 是否互质 即 gcd(dx, dy) == 1 如果是互质就 continue w = W - dx + 1 h = H - dy + 1 ans += w *

P6002 [USACO20JAN] Berry Picking S

2024-12-14
241214julyfunnoteswilliam工作

P6002 [USACO20JAN] Berry Picking S所以有前 k / 2号元素都是一个相同值枚举这个值m,有三种情况最多能取出k个m,则前所有元素均为 m最多能取小于 k / 2 个 m,无解否则尽可能取多个 m,剩下部分取最大的即可._, k = map(int, input().split()) a = list(map(int, input().split())) ans = 0 for m in range(1, 1001): num = 0 res = 0 rest = [] for x in a: num += x // m rest.append(x % m) if num >= k: res = m * k // 2 elif num >= k // 2: res = (num - k // 2) * m + sum(sorted(rest, reverse=True)[:(k - num)]) ans = max(ans, res) print(ans)Cow Frisbee S维护一个单调栈,每进入一个数 ai​,就向前扫描直到遇见一个 s_top​>ai​,由于有 ai​ 挡着,所以之后的我们全部都看不见,此时最终答案加上 (i−stop+1)。from collections import deque MAXN = int(1e6) n = 0 ans = 0 a = [0] * (MAXN + 1) s = deque() n = int(input()) for i in range(1, n + 1): a[i] = int(input()) for i in range(1, n + 1): while s and a[s[-1]] < a[i]: ans += i - s[-1] + 1 s.pop() if s: ans += i - s[-1] + 1 s.append(i) print(ans)# [USACO19JAN] Icy Perimeter S冰淇淋的面积用dfs很好求只要算出每个联通块中'#'的个数即可难点在于求联通快的周长观察一下样例 发现周长就是每个'#'周围'.'或超过边界的方块个数解决这一问题后这道题几乎就是一道dfs裸题

VAE

2024-12-12
julyfunnotes大四上机器学习

关于 VAE 理解的教程: https://spaces.ac.cn/archives/5253假定 $p(Z|X)$ 为一正态分布.(Z 为隐变量,X 为目标分布)注意不是假设 $p(Z)$为正态分布,不同 $X$ 显然必须有不同的隐藏分布,否则解码器无法区分它们,训练时 $X_i$ 和 $X^"hat"_i$ 就无法对应上.训练编码器使得样本对应的(编码器输出的)$mu$ 和 $log sigma^2$ 既要接近正态分布,又要对不同样本产生一些区别使得解码器能够将其还原到对应图像.接近正态又要有些微区分,这是一个权衡问题.为了防止正态分布采样以后,不同样本直接混在一起,其实不同类图像还是独占某一隐变量空间的区域的(这个我主成分分析绘制过).Hint:正态分布的参数为 runtime 参数(中间层输出结果),不是 traintime 权重.大致代码(见 speit-ml-tp 仓库) :from torch.nn.functional import binary_cross_entropy from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt class Sampling(nn.Module): def forward(self, mu, logvar): std = torch.exp(0.5 * logvar) eps = torch.randn_like(std) return mu + eps * std class Encoder(nn.Module): def __init__(self, latent_dim): super(Encoder, self).__init__() self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=2, padding=1) self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=2, padding=1) self.fc = nn.Linear(64 * 7 * 7, 16) self.fc_mu = nn.Linear(16, latent_dim) self.fc_logvar = nn.Linear(16, latent_dim) def forward(self, x): x = torch.relu(self.conv1(x)) x = torch.relu(self.conv2(x)) x = x.view(x.size(0), -1) x = torch.relu(self.fc(x)) mu = self.fc_mu(x) logvar = self.fc_logvar(x) return mu, logvar class Decoder(nn.Module): def __init__(self, latent_dim): super(Decoder, self).__init__() self.fc = nn.Linear(latent_dim, 64 * 7 * 7) self.deconv1 = nn.ConvTranspose2d(64, 64, kernel_size=3, stride=2, padding=1, output_padding=1) self.deconv2 = nn.ConvTranspose2d(64, 32, kernel_size=3, stride=2, padding=1, output_padding=1) self.deconv3 = nn.ConvTranspose2d(32, 1, kernel_size=3, padding=1) def forward(self, z): x = torch.relu(self.fc(z)) x = x.view(-1, 64, 7, 7) x = torch.relu(self.deconv1(x)) x = torch.relu(self.deconv2(x)) x = torch.sigmoid(self.deconv3(x)) return x class VAE(nn.Module): def __init__(self, latent_dim): super(VAE, self).__init__() self.encoder = Encoder(latent_dim) self.decoder = Decoder(latent_dim) self.sampling = Sampling() def forward(self, x): mu, logvar = self.encoder(x) z = self.sampling(mu, logvar) return self.decoder(z), mu, logvar def loss_function(recon_x, x, mu, logvar): # reconstruction BCE = binary_cross_entropy(recon_x, x, reduction='sum') KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp()) return BCE + KL

4-缓存

2024-12-08
julyfunnotes大四上计算机体系结构

mostly gpt-4o写策略(Write Policies)写回(Write-back): 保证仅直接操作缓存缓存中映射了内存的某一些地址。如果写时目标地址在缓存中,则称为“写命中”,此时可以先写入缓存,暂时不写入内存. 之后会刷入内存.当发生写命中时,数据只写入缓存,而不立即写入主存。写入缓存后,标记为“脏”的位会被设置为1,表示该块数据已被修改但尚未写入主存。写入缓存的速度很快,因此写回缓存的写延迟通常很小。当一个块从写回缓存中被驱逐时,如果其“脏”位为1,则必须将该块的数据写入主存。这增加了硬件实现的复杂性。直写(Write-through): 保证操作主存当发生写命中时,数据同时写入缓存和主存。写入缓存的速度很快,但写入主存的速度较慢,因此直写缓存的写延迟比写回缓存的要慢。直写缓存使硬件设计更简单,因为可以假设主存中的数据始终是最新的。写绕过(Write-around):什么玩意儿在任何情况下,数据都直接写入主存。如果写入的数据块在缓存中存在,则将其有效位设置为无效。本质上,写绕过缓存中不存在写命中,写“命中”与写未命中执行相同的操作。未命中策略(Miss Policies)写分配(Write-allocate):保证仅直接操作缓存当发生写未命中时,将未命中的块加载到缓存中。针对写回、写分配缓存,这意味着数据不会直接写入主存,而是先写入缓存,随后在块被驱逐时再更新主存。无写分配(Write-No-Allocate):保证操作主存未命中时,数据直接写入主存,而不将数据加载到缓存中。这种策略适用于写操作较少的情况,因为它避免了不必要的缓存替换。缓存替换策略LRU(Least Recently Used,最近最少使用):当需要驱逐一个缓存块时,选择那个最久未被使用的块。这种策略假设最近使用的数据块在未来也可能会被再次使用,因此优先保留最近使用的块。实现LRU策略需要跟踪每个块的使用时间,这可能需要额外的硬件或软件开销。Random(随机替换):当需要驱逐一个缓存块时,随机选择一个块进行驱逐。这种策略实现简单,不需要跟踪缓存块的使用历史。虽然随机替换策略在某些情况下可能不如LRU等策略高效,但在实现复杂度和性能之间提供了一个平衡点。N 路N-Way Set Associative(N路组相联)是一种缓存放置策略,它结合了直接映射和全相联缓存的优点。缓存被分成若干组(sets),每组包含多个缓存块(ways)。内存地址首先映射到一个特定的组,然后可以放置在该组内的任何一个块中。具体参数解释Associativity (相联度):在这张图片中,相联度设置为4,这意味着缓存是4路组相联。这表示每个组内有 N = 4 个缓存块。Cache Size (缓存大小):缓存总大小为256字节。Block Size (块大小):假设块大小为16字节。计算组数缓存的总大小为256字节,相联度为4,块大小为16字节:每组的大小 = 相联度 × 块大小 = 4 × 16 = 64字节组数 = 缓存总大小 / 每组大小 = 256 / 64 = 4组工作原理地址映射:内存地址通过索引部分映射到特定的组,索引的计算方式是:(内存地址 / 块大小) % 组数例如,对于一个地址0x00,块大小为16字节,组数为4:组索引 = (0x00 / 16) % 4 = 0地址0x10:组索引 = (0x10 / 16) % 4 = 1L1 & L2image.png|500就是说 L1 没访问到,才去访问 L2

P3142 [USACO16OPEN] Field Reduction S

2024-12-04
241201julyfunnoteswilliam工作

P7148 [USACO20DEC] Cowntagion S1号点有一头牛节点的牛的来源只能来自于父亲节点现在如果要给2号牛,1号节点给一只牛就是最优选择 为什么呢?因为翻倍和给一头牛代价一样,所以给2头牛和给1头牛再翻倍是一样的以此类推,多头牛时,翻倍是更优的一种选择,并且只需给每个子节点1头牛读一个 n 统计每个点儿子数量 son 每次读一条边 x, y son[x] += 1 son[y] += 1 for i in range(2, n + 1): son[i] -= 1 ans = 0 for i in range(1, n + 1): 假设到达这个点的时候它的感染数量一定是 1 (x = 1) while x 还没到 (i 的儿子数量 + 1): x *= 2 ans += 1 ans += i 的儿子数量 print(ans)sum_counts = [0] * 100001 # Initialize an array to keep track of the number of edges total = 0 n = int(input()) # Read the number of nodes for _ in range(1, n): x, y = map(int, input().split()) # Read edges sum_counts[x] += 1 # Record the number of edges sum_counts[y] += 1 for i in range(1, n + 1): if i != 1: # Exclude the root node sum_counts[i] -= 1 # Subtract 1 from the edge count for the subtree x = 1 while x <= sum_counts[i]: # While the required count is not reached total += 1 x *= 2 # Double the growth total += sum_counts[i] # Allocate the remaining edges print(total)P3142 [USACO16OPEN] Field Reduction S想要求出最终围栏围起来的面积,只需要计算 (maxx−minx)(maxy−miny)(maxx−minx)(maxy−miny) 的值即可。首先,我们先用 Xi​ 排序,求得最大的 3 个点和最小的 3 个点。同样的方法给 Yi​ 排序,求得最大的 3 个点和最小的 3 个点。我们要暴力的答案中必定包含这 12 个点(当然有重复的点要去重)。接下来就是暴力的核心,用 dfs 每一次选择 3 个点,然后最后计算它的面积,取最小值即可。class Node: def __init__(self, x, y, down): self.x = x self.y = y self.down = down def check(r1, r2, r3): global ans min_x = float('inf') max_x = float('-inf') min_y = float('inf') max_y = float('-inf') for i in range(1, n + 1): if b[i].down == r1 or b[i].down == r2 or b[i].down == r3: continue min_x = min(min_x, b[i].x) max_x = max(max_x, b[i].x) min_y = min(min_y, b[i].y) max_y = max(max_y, b[i].y) ans = min(ans, (max_x - min_x) * (max_y - min_y)) # Update the answer with the minimum value n = int(sys.stdin.readline().strip()) b = [None] * (50005) ans = 1e18 g = [0] * (50005) cnt = 0 for i in range(1, n + 1): x, y = map(int, sys.stdin.readline().strip().split()) b[i] = Node(x, y, i) b[1:n + 1] = sorted(b[1:n + 1], key=lambda node: node.x) for i in range(1, 4): cnt += 1 g[cnt] = b[i].down for i in range(n, n - 3, -1): cnt += 1 g[cnt] = b[i].down b[1:n + 1] = sorted(b[1:n + 1], key=lambda node: node.y) for i in range(1, 4): cnt += 1 g[cnt] = b[i].down for i in range(n, n - 3, -1): cnt += 1 g[cnt] = b[i].down g = sorted(g[1:cnt + 1]) m = len(set(g[1:cnt + 1])) # Unique values to prevent duplicate contributions. for i in range(1, m + 1): # Enumerate the nodes for j in range(1, m + 1): for k in range(1, m + 1): if k == j or i == j or i == k: continue check(g[i], g[j], g[k]) print(int(ans))P5198 [USACO19JAN] Icy Perimeter S种子填充算法可以简单的解决。这道题就是让我们求最大连通块的面积和周长。面积很简单,就是这个冰激凌球中'#'的数量。而周长我们可以轻而易举地推出是这个冰激凌球中'#'上下左右四个方向‘.’的个数。对于递归中的每个点,如果周围是未编号节点,大小加一并且进入该点,如果周围是空地,周长加一

CH4-信道

2024-11-29
julyfunnotes信息与编码大四上

平均互信息image.png|500其中 $I(x_i; y_j) = log p(x_i|y_j) / p(x_i)$ 即 X 的信息量减去知道 Y 后 X 的信息量(收到 Y) 对于 X 的信息量的贡献.对称性: $I(X; Y) = I(Y; X)$非负性单次通信可能使 Y 的不确定性增大,但是统计平均一定是不确定性减小凸性I(X; Y) 是 关于 $p(bold(x^->))$ 向量的一个上凸函数,也就是说 x 知道 $I(x_i, y_j)$ 的情况下,$x$ 比较均匀的分布比较好.信道容量若知道 x, y 的转移矩阵,定义 $R_t = I(X, Y) / t$ 为信道传输速率,取最优的 $X$ 分布使得其最大,就得到信道容量 C.离散单符号信道及其容量容量容量就是给定转移矩阵的情况下求 $X$ 和 $Y$ 的分布使得 $I$ 最大.无干扰离散信道输入输出一一对应: $C = log n$多输入对应一输出: 有损失,无噪声, C = max(H(Y))否则无损失,有噪声.对称性作业里转移矩阵的每一行表示 $x_i$ 到各个 $y_j$ 分布. 乘法为 $y = x P$. 每一行和为 1.每一行包含的元素相同,则显然噪声熵 $H(Y|X)$ 与 $x$ 分布无关. (准对称)最大化 $H(Y)$ 即可最大化 $I(X; Y)$所以需要 $Y$ 等概率分布.如果是对称信道,可推出 $X$ 等概率分布.[转移矩阵]这里一般用第 i 行表示输入信号,第 j 列表示输出信号.每一行和为 1[强对称]均匀分配错误信号.image.png|500[对称]每一行和每一列包含相同元素.性质:若输入等概率,则输出等概率.容量: 取输入对称,结果为 $H(Y) - H(Y | X)$ = $log s - H(a, b, c...)$[准对称]输入对称而输出不对称,每一行元素相同容量: 需要划分为若干对称矩阵.image.png|600ref: https://blog.csdn.net/qq_36488756/article/details/110517599扩展信道ex: 知道单个符号的转移矩阵 $2 times 2$,可求两个符号的联合转移矩阵 $4 times 4$附录教程: https://www.wbyblog.cn/archives/57.html[抄的结论] $$I(x_i y_j) = I(y_j) + I(x_i | y_j)$$[记忆] $$p(y|x) = p(x y) / p(x) => H(Y|X) = H(X Y) - H(X)$

CH2-信息的统计

2024-11-27
julyfunnotes信息与编码大四上

[自信息]概率小 50%,信息量 + 1$I(x_i) = -log(x_i)$[条件自信息]...**[互信息]用于衡量两个随机变量之间相互依赖性的量(成功传输的信息)$I(X; Y) = H(X) - H(X | Y) = H(Y) - H(Y | X)$[信源熵]就是自信息的期望, 对于无记忆信源. 是一个先验概率:$$H(X) = E[I(X)] = sum_(i = 1)^n p(x_i) I(x_i) = - sum_(i = 1)^n p(x_i) log p(x_i)$$单位 bit/symbol (信息每符号)。符号几率越平均,熵越大还有后验概率版本,即接收到了以后反算熵.[条件熵]即条件自信息的期望. $H(Y|X)$ 为已知随机变量 $X$ 的条件下随机变量 $Y$ 的不确定性.[噪声熵]: X 给到 Y 以后 Y 还有多少噪声.image.png|500[损失熵]:X 的多少信息没传过去.例子:$x_1 tilde x_8$ 必导致 $y_1$, $x_9 tilde x_16$ 必导致 $y_2$,则噪声熵为 $0$,损失熵 $3$,联合熵image.png|500[联合熵 Joint Entropy]:image.png|500不确定性图:image.png|300image.png|600image.png|500例:image.png|300image.png|600例:image.png[熵函数的属性]非负性对称性: 交换概率,熵不变确定性:如果存在一个概率 = 1,则信息量为 0.扩展性: 将其中一个 $p_i$ 分出一个极小量到另一个符号,熵不变.强可加性:$H(X Y) = H(X) + H(Y | X)$可加性: s-独立时有 $H(X Y) = H(X) + H(Y)$增性:将其中一个符号 $x$ 拆分成若干个符号(概率和为 $x$),熵增加.上凸性:对概率向量 $P$,$H$ 是上凸的极限性质:对于离散信源, 当各个符号概率一样的时候,$H$ 最大.例题[问] $[1 / 2, 1 / 4, 1 / 8, 1/ 8]$ 信源的熵$$1 dot 1 / 2 + 2 dot 1 / 4 + 3 dot 1 / 8 dot 2 = 4 / 7 "bits/symbol"$$可以用变长码(哈夫曼编码)来表示这些符号,可以做到平均编码长度为 $1.75

CH3-离散和连续源的信息熵

2024-11-27
julyfunnotes信息与编码大四上

[Chain rules for Entropy]计算有记忆源的信息熵公式.$$H(X^N) = sum_(i = 1)^N H(X_i | X_(1..i - 1))$$[带记忆多符号离散平稳源的极限熵]定义为: image.png|500image.png平均符号熵和条件熵都会趋于稳定值(极限熵).[?]连续熵[微分熵]这是去掉无穷大项以后的相对熵.$$h(X) = - integral_S f(x) log f(x) dif x$$计算机内部先离散.[正态分布熵]逆天,我推的. 注意积 $e^(-t^2)t^2$ 时,令 $u = e^(-t^2)t, v = t$:$$ integral e^(-t^2) t^2 dif t &= u^circle v - u^(circle circle) v^prime &= [-1 / 2 e^(-t^2) dot t]_(-oo)^(+oo) - integral -1 / 2 e^(-t^2) dif t &= 0 + 1 / 2 sqrt(pi) $$ image.png最大熵定理同样方差情况下,正态分布熵最大.$H_0$ : 符号等概率分布情况下具有的熵. $= log_2 "符号数量"$利用率 $eta = H_"real"(X) / (H_0(X))$, 冗余度 $gamma = 1 - eta$信源编码:冗余度越小越好信道编码:需要增加一些冗余度以提升抗干扰性.杂项条件熵一定小于无条件

课堂计划

2024-11-27
241123julyfunnoteswilliam工作

P10135 [USACO24JAN] Potion Farming S每个叶子恰好走一次,若叶子个数为 $v$,则只需考虑前 $v$ 次遍历。若一个子树中有 $n$ 次药水出现,$m$ 个叶子,则其对答案的贡献为 $min(n, m)$N = int(1e5 + 19) p = [0] * N cnt = [0] * N dep = [0] * N tot = 0 mx = 0 f = [0] * N fa = [0] * N g = [[] for _ in range(N)] depid = [[] for _ in range(N)] def dfs(node, parent): global mx, tot dep[node] = dep[parent] + 1 fa[node] = parent mx = max(dep[node], mx) depid[dep[node]].append(node) flag = False for neighbor in g[node]: if neighbor != parent: dfs(neighbor, node) flag = True if not flag: tot += 1 f[node] += 1 def read(): return int(input().strip()) def write(value, end_char): print(value, end=end_char) n = read() for i in range(1, n + 1): p[i] = read() for _ in range(1, n): a, b = read(), read() g[a].append(b) g[b].append(a) dfs(1, 1) for i in range(1, tot + 1): cnt[p[i]] += 1 ans = 0 while mx: for i in depid[mx]: if f[i]: if cnt[i] <= f[i]: f[i] -= cnt[i] ans += cnt[i] else: ans += f[i] f[i] = 0 f[fa[i]] += f[i] mx -= 1 write(ans, '\n')P5197 [USACO19JAN] Grass Planting S一个点的相邻的点都不能是同一颜色,如果算上自己有 $n$ 个颜色,那就至少要 $n$ 个颜色。定义每个点的度为 d[i],取 d[i] + 1 的最大值就是答案吗?答案是肯定。设最大值为 $t$,则先随便涂一个点 $i$ 的相邻点,以它为根继续考虑孩子颜色,发现对于每个孩子来说只有 $2$ 个颜色被确定了,从剩下 $t - 2$ 个颜色中任意选一些不同的颜色来涂孩子,以此递归就可以。x = 0 y = 0 ans = 0 n = 0 deg = [0] * 100007 n = int(input()) for i in range(1, n): x, y = map(int, input().split()) deg[x] += 1 # 统计度数 deg[y] += 1 if deg[x] > ans: ans = deg[x] + 1 if deg[y] > ans: ans = deg[y] + 1 print(ans + 1)P7148 [USACO20DEC] Cowntagion S首先,对于每一个节点,如果它的感染者数目已经超过了儿子数,则进行的一定是儿子个数次 (2) 操作。反之,如果在还没有足够的感染者个数的情况下就开始分,显然是不优的。所以对于每一个节点都进行贪心:如果还不够分,就执行若干次 (1) 操作,直到够分了为止。如果已经够分了,就花若干天,每天执行一次 (2) 操作直到所有儿子都有感染者为止。很容易证明这是最优的。于是我们记录每一个节点的儿子个数,记为 cson[u]cson[u],每次 dfsdfs 到一个点,我们就先计算 log⁡cson[u]+1logcson[u]+1,表示自增至足够感染者的天数(注意不是 ceil),然后进行分发,即花 cson[u]cson[u] 天给所有儿子都发一个感染者,最后注意根节点本身就有一只感染者,处理一下即可

课堂计划

2024-11-16
241116julyfunnoteswilliam工作

# P5194 [USACO05DEC] Scales S这道题是一道搜索题,一种思路是直接对每一个数做出选与不选的判断,时间复杂度 O(2n)O(2n) 。在这种时间复杂度下,只能通过 n≤30n≤30 的数据。如何进行优化呢?改变搜索顺序。这一道题的输入数据是一个不下降序列,如果我们把小的数放在前面,而 CC 又比较大的话,前面的小数就会有很多的空间进行选择,极限数据下甚至可以卡死代码。为了避免这种情况,我在读入的时候从 anan​ 开始倒着读,这样 a 数组中就是一个不上升子序列,前面的大数很容易就因为 CC 的限制失去很多选择,节省了很多的时间。其中 a 数组是我存放数的数组。模拟可行性剪枝,我们不妨这么想:如果说当前所选的数的总和加上后面的数的总和,即后缀和都没有超过 CC 的话,那么当前的和就是在这种选择下可以达到的最大值。既然我们已经知道了最大值,并且题目所求的就是最大值,此时我们可以直接去更新答案, 然后退出这一层搜索。面对数很多的时候,这个剪枝会发挥出极大的威力。from collections import deque n, c = map(int, input().split()) a = [] for _ in range(n): a.append(int(input())) a.sort(reverse=True) suf = [0] * (n + 1) for i in range(n - 1, -1, -1): suf[i] = suf[i + 1] + a[i] ans = 0 def dfs(pos, t): global ans if t > c: return if suf[pos] + t <= c: ans = max(suf[pos] + t, ans) return ans = max(ans, t) for i in range(pos, n): dfs(i + 1, t + a[i]) dfs(0, 0) print(ans) P2997 [USACO10NOV] Banner Shttps://www.luogu.com.cn/problem/P2997平面上有(0,0)到(n,m)的(n+1)*(m+1)个点。问有多少点对所连的线段不过其他点,且长度在[l,h]范围内枚举 dx, dy, dx 与 dy 互质即可。def gcd(a: int, b: int): return b if a % b == 0 else gcd(b, a % b) n, m, l, r = map(int, input().split()) answer = 0 for i in range(1, n + 1): for j in range(1, m + 1): if gcd(i, j) == 1 and l * l <= i * i + j * j <= r * r: answer += 2 * (n - i + 1) * (m - j + 1) if l == 1: answer += n * (m + 1) + (n + 1) * m print(answer)做题技巧3:想到了算法或者找到了规律,但是实现之后还是超时,有三种方法加快速度: 1.预处理 (先得到一些简单的结论,再利用结论去解决更复杂的情况) 2.二分查找 (例如,在2组数字中各找一个数字使得差值最小,遍历第一组数,利用二分去第2组找到离它最近的数) 3.数学公式或者数学思想 (例如,可以利用求和公式代替1-n的for循环,或者抽屉原理,排列组合,容斥原理等等)USACO 2022 US Open Contest, Silver Problem 2. Subset Equality https://usaco.org/index.php?page=viewproblem2&cpid=1231#include <bits/stdc++.h> using namespace std; string s1, s2; bool can[30][30]; //char t1[100010], t2[100010]; string t1,t2; bool check(string s) { int len = s.size(); for (int i = 0; i < len; i++) { for (int j = i; j < len; j++) { if(!can[s[i]-'a'][s[j]-'a']) { return false; } } } return true; } /* ���Է���һ�����ʣ��������ab��ac��bc��������ôabcҲ�ǿ��е�, ����Ԥ��������ѯ�ʳ�Ϊ1����2�Ϳ����� */ int main() { // ios::sync_with_stdio(false); // cin.tie(0), cout.tie(0); cin >> s1 >> s2; int len1 = s1.size(), len2 = s2.size(); for (int i = 0; i < 18; i++) for (int j = i; j < 18; j++) { t1=""; t2=""; for (int k = 0; k < len1; k++) if ((s1[k] == 'a' + i) || (s1[k] == 'a' + j)) { t1+=s1[k]; } for (int k = 0; k < len2; k++) if ((s2[k] == 'a' + i) || (s2[k] == 'a' + j)) { t2+=s2[k]; } can[i][j] = t1==t2; } int q; cin >> q; string s; for (int i = 0; i < q; i++) { cin >> s; if (check(s)) cout<<'Y'; else cout<<'N'; } return 0; } USACO 2021 December Contest, Silver Problem 1. Closest Cow Wins https://usaco.org/index.php?page=viewproblem2&cpid=115

11-trpo算法

2024-11-11
hrljulyfunnotes技术学习

对 AC 做了非常多优化【策略目标】修改成新策略 $pi_(theta^prime)$ 下的形式并做近似近似过程要求 $theta^prime$ 和 $theta$ 不能差太多,故 KL 散度约束到 $delta$ 之内.【近似求解】对目标函数 1 阶近似,带 $g$,KL 约束 2 阶近似,带海森矩阵 $H$.可直接用 KKT 导出问题的解 $theta_(k + 1)$.【共轭梯度】直接假设每一步 KL 散度都更新到 $delta$,可简化 KKT 解直接用共轭梯度法解算 $H x = g$【线性搜索】由于多处近似,解可能不满足 KL 散度约束取 $(0, 1)$ 之间的超参数 $alpha$,求最小非负整数 $i$ 使得 $alpha^i$ 倍变化量满足 KL 散度限制.【广义优势估计】上面还没估计优势函数 [?]设时序差分误差 $delta_t = r_t + gamma V(s_(t + 1)) - V(s_t)$令 $A_t^((k)) = sum_(l = 0)^(k - 1) gamma^l delta_(t + l)$对 $A$ 进行指数加权平均.代码实践如果动作时连续的,策略网络可输出动作高斯分布的均值和标准差,形同: mu, std = self.actor(states) old_action_dists = torch.distributions.Normal(mu.detach(), std.detach()) old_log_probs = old_action_dists.log_prob(actions) critic_loss = torch.mean( F.mse_loss(self.critic(states), td_target.detach())) self.critic_optimizer.zero_grad() critic_loss.backward(

10-actor-critic算法

2024-11-11
hrljulyfunnotes技术学习

see: https://hrl.boyuai.com/chapter/2/actor-critic%E7%AE%97%E6%B3%95上一章用 $G_t$ 代替 $Q^pi (s, a)$,现在用时序差分残差公式代替之.因为 $Q = r + gamma V$.所以训练一个 $V$ 网路就行原文已经写的很像回忆提纲了训练一个价值网络:Input : 可微状态 $s$Output : $V(s)$Loss: $$1 / 2 (r + gamma V_omega (s_(t + 1)) - V_omega (s_t))^2$$其中 $r + gamma V_omega (s_(t + 1))$ 不参与梯度计算. 代码中使用 detach() 直接实现,不用双网络.和 DQN 一样训练数据来源于采样池.训练过程和 Actor 的关系?Actor 产生了采样池,Actor 变强后采样分布会变化采样数据为 $(s_i, a_i, r_i, s_i^prime)$.注意采样的 $a$ 并不影响 $V$ 梯度下降,乱采样也能训练出正确的 $V$ 网络先来看 Actor + Critic 包装器的 updateclass ActorCritic: # self.critic = ValueNet(state_dim, hidden_dim).to(device) # 价值网络 ... def update(self, transition_dict): states = torch.tensor(transition_dict['states'], dtype=torch.float).to(self.device) actions = torch.tensor(transition_dict['actions']).view(-1, 1).to( self.device) rewards = torch.tensor(transition_dict['rewards'], dtype=torch.float).view(-1, 1).to(self.device) next_states = torch.tensor(transition_dict['next_states'], dtype=torch.float).to(self.device) dones = torch.tensor(transition_dict['dones'], dtype=torch.float).view(-1, 1).to(self.device) # 时序差分目标 td_target = rewards + self.gamma * self.critic(next_states) * (1 - dones) td_delta = td_target - self.critic(states) # 时序差分误差 log_probs = torch.log(self.actor(states).gather(1, actions)) actor_loss = torch.mean(-log_probs * td_delta.detach()) # 均方误差损失函数,这里直接 detach() 来实现类似 Double DQN 的效果... (不演了是吧) critic_loss = torch.mean( F.mse_loss(self.critic(states), td_target.detach())) self.actor_optimizer.zero_grad() self.critic_optimizer.zero_grad() actor_loss.backward() # 计算策略网络的梯度 critic_loss.backward() # 计算价值网络的梯度 self.actor_optimizer.step() # 更新策略网络的参数 self.critic_optimizer.step() # 更新价值网络的参数 class PolicyNet(torch.nn.Module): def __init__(self, state_dim, hidden_dim, action_dim): super(PolicyNet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, action_dim) def forward(self, x): x = F.relu(self.fc1(x)) return F.softmax(self.fc2(x), dim=1) class ValueNet(torch.nn.Module): def __init__(self, state_dim, hidden_dim): super(ValueNet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, 1) def forward(self, x): x = F.relu(self.fc1(x)) return self.fc2(x)效果:抖动比基于蒙特卡洛的 REINFORCE 收敛更快,且非常稳定

其他一样.

2024-11-11
hrljulyfunnotes技术学习

之前的算法基于价值,没有显式策略(策略就是选最大动作价值的动作)。下述 REINFORCE 方法基于策略.设 $pi_theta$ 是策略,处处可微,要学习的参数为 $theta$目标是最大化 : $$J(theta) = EE_(s_0) [V^(pi_theta) (s_0) ]$$设状态访问分布为 $nu^pi$(无穷步状态概率加权向量,见第三章),有:提示: $(log f)^prime = f^prime / f$image.png另一证明:https://paddlepedia.readthedocs.io/en/latest/tutorials/reinforcement_learning/policy_gradient.html此图第一行少写了一个 $sum$这里 $T(s, a)$ 是执行 $a$ 后转移到 $s$ 的概率.image.png蒙特卡洛 REINFORCE考虑用蒙特卡洛方法估计,对有限步的环境来说,依据上式有:其中 $T$ 为最大步数. 小括号内就是 $G_t$,下面第二张图中以 $psi_t$ 表示.image.png训练步骤image.png网络结构:Input: 可微状态Output: 离散动作的概率多项分布损失函数: 上述梯度更新公式(去掉微分符号)class PolicyNet(torch.nn.Module): def __init__(self, state_dim, hidden_dim, action_dim): super(PolicyNet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, action_dim) def forward(self, x): x = F.relu(self.fc1(x)) return F.softmax(self.fc2(x), dim=1) class REINFORCE: def __init__(self, state_dim, hidden_dim, action_dim, learning_rate, gamma, device): self.policy_net = PolicyNet(state_dim, hidden_dim, action_dim).to(device) ... def take_action(self, state): # 根据动作概率分布随机采样 state = torch.tensor([state], dtype=torch.float).to(self.device) probs = self.policy_net(state) action_dist = torch.distributions.Categorical(probs) action = action_dist.sample() # 随机选一个 return action.item() def update(self, transition_dict): reward_list = transition_dict['rewards'] state_list = transition_dict['states'] action_list = transition_dict['actions'] G = 0 self.optimizer.zero_grad() for i in reversed(range(len(reward_list))): # 从最后一步算起 reward = reward_list[i] state = torch.tensor([state_list[i]], dtype=torch.float).to(self.device) action = torch.tensor([action_list[i]]).view(-1, 1).to(self.device) log_prob = torch.log(self.policy_net(state).gather(1, action)) G = self.gamma * G + reward loss = -log_prob * G # 每一步的损失函数 loss.backward() # 反向传播计算梯度 self.optimizer.step() # 梯度下降 # 其他一样.考虑最优情况的正确性:若 $G_1 = 200, G_2 = -200$,则会学到使得 $p_1$ 尽可能大(取 -log 后尽可能小,损失尽可能小),$p_2$ 尽可能小(取 -log 后极大,损失极小)softmax 应该能防止数值爆炸.优化问题,神经网络和强化学习..

8-DQN-改进算法

2024-11-09
hrljulyfunnotes技术学习

Double DQN上一章的 DQN 在计算 $y^"real"$ 时,使用的是:image.pngimage.png如 $w^-$ 有正向误差估计,则 $Q(s, a)$ 会被过高估计,而拿 $Q(s, a)$ 更新上一步 $Q$ 时,误差会逐渐累积。如何解决?将优化目标改为下式,也就是选取下一步最优动作时使用训练网络而不是目标网络. 这样可以缓解此问题.image.pngDouble DQN 代码区别 if self.dqn_type == 'DoubleDQN': # DQN与Double DQN的区别 max_action = self.q_net(next_states).max(1)[1].view(-1, 1) max_next_q_values = self.target_q_net(next_states).gather(1, max_action) else: # DQN的情况 max_next_q_values = self.target_q_net(next_states).max(1)[0].view(-1, 1)结果可视化打印了两个图.打印每个 episode 的回报移动平均对每个时间步,记录该 episode (模拟采样周期)内的移动最大值,这是用于观察是否有 $Q$ 超限的情况 while not done: # 每个模拟时间步 action = agent.take_action(state) max_q_value = agent.max_q_value( state) * 0.005 + max_q_value * 0.995 # 平滑处理 max_q_value_list.append(max_q_value) # 保存每个状态的最大Q值Dueling DQNimage.png这里 $eta, alpha, beta$ 都是网络参数的意思。$V$ 为状态价值函数,$A$ 为优势函数,数学上定义为 $A(s, a) = Q(s, a) - V(s)$.image.png注意训练数据依然是 $(s, a, r, s^prime)$ 的批量采样.好处:某些情况下动作对价值影响不大。如果分开建模,训练这些情况时注意力会集中在 $V$ 网络上.image.png不唯一性问题image.png平均化操作更稳定,训练时采用之.代码基本上与 DQN 的区别只有下述代码:class VAnet(torch.nn.Module): ''' 只有一层隐藏层的A网络和V网络 ''' def __init__(self, state_dim, hidden_dim, action_dim): super(VAnet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) # 共享网络部分 self.fc_A = torch.nn.Linear(hidden_dim, action_dim) self.fc_V = torch.nn.Linear(hidden_dim, 1) def forward(self, x): A = self.fc_A(F.relu(self.fc1(x))) V = self.fc_V(F.relu(self.fc1(x))) Q = V + A - A.mean(1).view(-1, 1) # Q值由V值和A值计算得到 return Q效果 : 学习更加稳定(回报曲线),得到回报的最大值也更优秀.DQN 对 Q 值过高估计的定量分析利用简单的累积分布函数知识(初中数学知识),如果 Q-net 的 $m$ 个动作的预测值会随机偏大偏小,则预测值的最大值的期望会比真实值最大值大.当神经网络的预测方差与动作优势值达到同量级时,会非常严重

读取奶牛数量

2024-11-09
241109julyfunnoteswilliam工作

P3416 [USACO16DEC] Moocast Shttps://usaco.org/index.php?page=viewproblem2&cpid=668约翰农场主的 $N$ 头奶牛需要建立一个广播系统,每头奶牛有一个对讲机,具有一定的传输半径 $P$。一头奶牛可以通过直接或中继的方式,将信息传递给其他奶牛。目标是找到从某头奶牛开始广播时,能够到达的奶牛的最大数量。算法分析图的构建:每头奶牛看作一个节点。如果奶牛 $i$ 的对讲机能直接覆盖奶牛 $j$,则在图中从 $i$ 到 $j$ 添加一条有向边。广度优先搜索 (BFS):从每个节点开始,使用 BFS 遍历可达的所有节点。记录从某个节点开始可以到达的最大节点数。代码注释# 读取奶牛数量 n = int(input()) # 初始化邻接表,用于存储每头奶牛可以直接发送信息到达的奶牛 e = [[] for _ in range(n)] # 初始化位置和能量列表 pos, p = [], [] # 读取每头奶牛的位置和能量 for _ in range(n): x1, y1, p1 = map(int, input().split()) pos.append((x1, y1)) p.append(p1) # 计算两头奶牛之间的距离平方 def dis(a, b): return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 # 构建图,确定每头奶牛可以直接向哪些奶牛发送信息 for i in range(n): for j in range(n): if i == j: continue # 跳过自己 # 如果奶牛 j 在奶牛 i 的传输范围内,则添加到邻接表 if dis(pos[i], pos[j]) <= p[i] ** 2: e[i].append(j) from collections import deque # 初始化最大可到达奶牛数量 ans = 0 # 对每头奶牛执行广度优先搜索(BFS) for i in range(n): # 用于记录访问过的奶牛 vis = [False] * n # 创建队列进行 BFS q = deque() q.append(i) tot = 0 vis[i] = True while len(q) > 0: tot += 1 u = q.popleft() # 遍历当前奶牛可以直接到达的奶牛 for v in e[u]: if not vis[v]: # 如果奶牛 v 未访问过 q.append(v) vis[v] = True # 更新最大可到达奶牛数量 if tot > ans: ans = tot # 输出最大可到达奶牛数量 print(ans)程序填空版n = int(input()) e = [[] for _ in range(n)] pos, p = [], [] for _ in range(n): x1, y1, p1 = map(int, input().split()) pos.append((x1, y1)) p.append(p1) def dis(a, b): # 计算两头奶牛之间的距离平方 return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 for i in range(n): for j in range(n): if i == j: continue # 如果奶牛 j 在奶牛 i 的传输范围内,则添加到邻接表 if dis(pos[i], pos[j]) <= ________: e[i].append(j) from collections import ________ ans = 0 for i in range(n): # 用于记录访问过的奶牛 vis = [False] * n # 创建队列进行 BFS q = deque() q.append(i) tot = 0 vis[i] = ________ while len(q) > 0: tot += 1 u = q.________() # 遍历当前奶牛可以直接到达的奶牛 for v in e[u]: if not vis[v]: q.append(v) vis[v] = ________ # 更新最大可到达奶牛数量 if tot > ans: ans = tot # 输出最大可到达奶牛数量 print(______)该算法使用图的表示和 BFS 来计算每头奶牛作为起点时,最多可以到达多少头奶牛。通过遍历每个节点并执行 BFS,我们可以找到最大的可达节点数。复杂度主要受 BFS 和图的构建影响,为 $O(N^2)$。P6111 [USACO18JAN] MooTube Shttps://usaco.org/index.php?page=viewproblem2&cpid=788树的性质:由于是树形结构,任意两个节点之间有且仅有一条路径。 任意两个视频间的相关性是路径上所有边中相关性最小的那一条。 解题思路 深度优先搜索 (DFS): 我们可以从给定的视频节点出发,使用 DFS 遍历整棵树。 在遍历过程中,只访问那些与当前节点相关性大于等于 K 的节点。 计数满足条件的节点。def dfs(u, fa, k): global cnt # 遍历当前节点 u 的所有邻接节点 for v, w in G[u]: # 如果该节点不是父节点且相关性 w 大于等于 k if v != fa and w >= k: cnt += 1 # 满足条件的节点计数加一 dfs(v, u, k) # 递归调用 DFS import sys # 增加递归深度限制,确保 DFS 不会因深度过大而失败 sys.setrecursionlimit(10000) n, Q = map(int, input().split()) G = [[] for _ in range(n + 1)] # 初始化邻接表 # 读取 N-1 条边的信息 for _ in range(n - 1): p, q, r = map(int, input().split()) G[p].append((q, r)) # 添加边 p -> q G[q].append((p, r)) # 添加边 q -> p (无向图) # 处理每个查询 for _ in range(Q): k, v = map(int, input().split()) cnt = 0 # 初始化计数 dfs(v, -1, k) # 从节点 v 开始 DFS,父节点设为 -1 表示无父节点 print(cnt) # 输出满足条件的视频数量填空:def dfs(u, fa, k): global cnt # 遍历当前节点 u 的所有邻接节点 for v, w in G[u]: # 如果该节点不是父节点且相关性 w 大于等于 k if ___ and ___: cnt += 1 # 满足条件的节点计数加一 dfs(___) # 递归调用 DFS import sys # 增加递归深度限制,确保 DFS 不会因深度过大而失败 sys.setrecursionlimit(10000) n, Q = map(int, input().split()) G = [[] for _ in range(___)] # 初始化邻接表 # 读取 N-1 条边的信息 for _ in range(n - 1): p, q, r = map(int, input().split()) G[p].append((q, r)) # 添加边 p -> q G[q].append((___, ___)) # 添加边 q -> p (无向图) # 处理每个查询 for _ in range(Q): k, v = map(int, input().split()) cnt = ___ # 初始化计数 dfs(v, ___, k) # 从节点 v 开始 DFS,父节点设为 -1 表示无父节点 print(___) # 输出满足条件的视频数量作业题 # P2997 [USACO10NOV] Banner Shttps://www.luogu.com.cn/problem/P2997平面上有(0,0)到(n,m)的(n+1)*(m+1)个点。问有多少点对所连的线段不过其他点,且长度在[l,h]范围内枚举 dx, dy, dx 与 dy 互质即可

常规 Q-learning

2024-11-08
hrljulyfunnotes技术学习

DQN 作用:对于连续的状态和离散的动作,可通过采样方式更新神经网络Input: 可微状态(并不含动作)Output: 离散动作的动作价值这就是学了个 $Q$,有了 $Q$ 策略就是选最大价值动作。本章训练环境为小车上平面倒立摆的控制,奖励函数: 坚持 1 帧获得奖励 1,倾斜度数或者偏离程度过大或坚持 200 帧则结束。image.png损失设计由于 Q-learning 是这样的:image.png所以对于一个批量的采样 ${(s_i, a_i, r_i, s_i^prime)}$,可以这样设计损失函数:注意下面损失函数里有 $Q$ 本身,无法方便求损失,所以后面设计了双网络(训练网络和目标网络)。这里 $w$ 是 MLP 权重。image.png损失函数为 $0$ 时,再训练时满足: 动作奖励函数 = 该动作奖励 + $gamma times$ (状态随机采样,动作最优)后续状态下最优动作奖励函数训练细节: 经验回放 experience replay将历次采样放入缓冲区,取缓冲区的若干次数据(而不是最近一次)作为一个小批量来优化 $Q_w$整个训练过程中,replay_buffer 不重置,每次训练拿出的数据大小为 batch_size目标网络 + 训练网络其实就是复制两份网络,训练网络每次批量优化时都会更新(目标网络暂不更新),其中损失函数使用目标网络计算,每隔 $C$ 步将目标网络同步到训练网络。注意神经网络形式化的损失函数总是 $sum (F(x_i) - y_i^"real")^2$,在下方原文中可以见到。$w^-$ : 目标网络的权重image.png# 常规 Q-learning ... action = agent.take_action(state) next_state, reward, done = env.step(action) agent.update(state, action, reward, next_state) state = next_state class ...: def update(self, s0, a0, r, s1): td_error = r + self.gamma * self.Q_table[s1].max( ) - self.Q_table[s0, a0] self.Q_table[s0, a0] += self.alpha * td_error# DQN class Qnet(torch.nn.Module): def __init__(self, state_dim, hidden_dim, action_dim): super(Qnet, self).__init__() self.fc1 = torch.nn.Linear(state_dim, hidden_dim) self.fc2 = torch.nn.Linear(hidden_dim, action_dim) def forward(self, x): x = F.relu(self.fc1(x)) return self.fc2(x) class ...: def update(self, transition_dict): states = torch.tensor(transition_dict['states'], dtype=torch.float).to(self.device) actions = torch.tensor(transition_dict['actions']).view(-1, 1).to( self.device) rewards = torch.tensor(transition_dict['rewards'], dtype=torch.float).view(-1, 1).to(self.device) next_states = torch.tensor(transition_dict['next_states'], dtype=torch.float).to(self.device) # dones[i]: 第 i 个状态是否为终止状态 dones = torch.tensor(transition_dict['dones'], dtype=torch.float).view(-1, 1).to(self.device) # q_values: 训练网络给出的 Q值, 作为 y^hat,上面存了梯度 # `gather`函数用于从输出中选择特定的Q值。`1`表示在第二个维度(动作维度)进行选择,`actions`是动作的索引 # [q] gather 也能存梯度么? q_values = self.q_net(states).gather(1, actions) # 下个状态的最大Q值,目标网络给出,这是 y^real 的一部分 max_next_q_values = self.target_q_net(next_states).max(1)[0].view(-1, 1) q_targets = rewards + self.gamma * max_next_q_values * (1 - dones) # 终止状态不考虑下步奖励 dqn_loss = torch.mean(F.mse_loss(q_values, q_targets)) # 均方误差损失函数 self.optimizer.zero_grad() # PyTorch中默认梯度会累积,这里需要显式将梯度置为0 dqn_loss.backward() # 反向传播更新参数 self.optimizer.step() if self.count % self.target_update == 0: self.target_q_net.load_state_dict( self.q_net.state_dict()) # 更新目标网络 self.count += 1 action = agent.take_action(state) next_state, reward, done, _ = env.step(action) replay_buffer.add(state, action, reward, next_state, done) state = next_state # 当buffer数据的数量超过一定值后,才进行Q网络训练 if replay_buffer.size() > minimal_size: b_s, b_a, b_r, b_ns, b_d = replay_buffer.sample(batch_size) transition_dict = { 'states': b_s, 'actions': b_a, 'next_states': b_ns, 'rewards': b_r, 'dones': b_d } agent.update(transition_dict)最后输出image.png这里输出的每一个值是单个 episode 重置环境后的若干步采样的平均 return。相当于把机器人放到现实环境里去跑了几秒钟。done

训练部分

2024-11-08
hrljulyfunnotes技术学习

时序差分算法用于评估价值函数,$alpha$ 为常数,和蒙特卡洛一样是基于采样。优点在于,每采样一步就可以更新状态估计。同样会收敛。下式中 $t$ 为模拟的时间步。$$V(s_t) <- V(s_t) + alpha [r_t + gamma V(s_(t + 1)) - V(s_t)]$$Sarsa用于求解最优策略。时序差分能估计 $V$,但没法直接拿到策略.然而时序差分算法也可以用来估计动作价值函数 $Q(s_t, a_t)$ :以 $1 - epsilon$ 概率采样动作价值最大的动作,剩下概率随机选一个每次采样步更新:$Q(s, a) <- Q(s, a) + alpha [r + gamma Q(s^prime, a^prime) - Q(s, a)]$字母定义见下代码最后通过 Q table 的最大值获取策略每个时间步(已知 s 和动作 a): 得到环境反馈 r, s' e-greedy 选一个 a' Q(s, a) <- Q(s, a) + alpha[r + gamma Q(s', a') - Q(s, a)] s, a = s', a'# 训练部分 for i_episode in num_episodes: state = env.reset() action = agent.take_action(state) done = False while not done: next_state, reward, done = env.step(action) next_action = agent.take_action(next_state) agent.update(state, action, reward, next_state, next_action) state = next_state action = next_action # 原文 Q-learning 处的写法似乎更好 ... state = env.reset() done = False while not done: action = agent.take_action(state) next_state, reward, done = env.step(action) agent.update(state, action, reward, next_state) state = next_state class CliffWalkingEnv: def step(self, action): ... return next_state, reward, done class Sarsa: def update(self, s0, a0, r, s1, a1): td_error = r + self.gamma * self.Q_table[s1, a1] - self.Q_table[s0, a0] self.Q_table[s0, a0] += self.alpha * td_error def take_action(self, state): if np.random.random() < self.epsilon: action = np.random.randint(self.n_action) else: action = np.argmax(self.Q_table[state]) return action效果:采取比较原理悬崖的方式抵达目标。n 步 Sarsa采样到至少 $n$ 步后,对最近 $n$ 步实施类似蒙特卡洛的反向更新。class Sarsa: def update(self, s0, a0, r, s1, a1, done): self.state_list.append(s0) self.action_list.append(a0) self.reward_list.append(r) if len(self.state_list) == self.n: # 若保存的数据可以进行n步更新 G = self.Q_table[s1, a1] # 得到Q(s_{t+n}, a_{t+n}) for i in reversed(range(self.n)): G = self.gamma * G + self.reward_list[i] # 不断向前计算每一步的回报 # 如果到达终止状态,最后几步虽然长度不够n步,也将其进行更新 if done and i > 0: s = self.state_list[i] a = self.action_list[i] self.Q_table[s, a] += self.alpha * (G - self.Q_table[s, a]) s = self.state_list.pop(0) # 将需要更新的状态动作从列表中删除,下次不必更新 a = self.action_list.pop(0) self.reward_list.pop(0) # n步Sarsa的主要更新步骤 self.Q_table[s, a] += self.alpha * (G - self.Q_table[s, a]) if done: # 如果到达终止状态,即将开始下一条序列,则将列表全清空 self.state_list = [] self.action_list = [] self.reward_list = []训练部分不变会传入一个环境产生的 done.效果:采取更保守的策略,更原理悬崖边。Q-learning$$Q(s_t, a_t) <- Q(s_t, a_t) + alpha [r + gamma max_a Q(s_(t + 1), a) - Q(s, a)]$$image.png更新 Q 的公式不同,但采样过程可以用 $epsilon$ 贪心走到下一步。class QLearning: def update(self, s0, a0, r, s1): td_error = r + self.gamma * self.Q_table[s1].max( ) - self.Q_table[s0, a0] self.Q_table[s0, a0] += self.alpha * td_error效果:生成的策略更激进,策略回报也更优。但是交互过程采用 $epsilon$ 贪婪,常会掉进悬崖,训练过程中采样的回报较差。在线策略和离线策略原文声称,on-policy 指模拟采样策略(行为策略)和更新公式(目标策略)一致的策略。例如 Sarsa.在线策略的目标就是老老实实最小化采样回报。而离线策略采样回报和严格按照策略执行的回报会不一致。不一致则为离线策略done

对于第一个 batch,每个 num_keys 保留 2

2024-11-06
d2ljulyfunnotes技术学习

$$ f(x) = sum_(i = 1)^n "softmax"(-1 / 2 ((x - x_i)w)^2)y_i $$该公式括号内部可称为”评分函数“masked_softmaxdef masked_softmax(X, valid_lens): """在最后一个轴上掩蔽元素后,执行softmax操作""" # X:3D张量,valid_lens:1D或2D张量 # 使用时,X.shape = (batch_size, num_queries, num_keys),表示注意力权重。此函数掩盖部分 keys 的注意力权重 if valid_lens is None: return nn.functional.softmax(X, dim=-1) else: shape = X.shape if valid_lens.dim() == 1: valid_lens = torch.repeat_interleave(valid_lens, shape[1]) else: valid_lens = valid_lens.reshape(-1) # 最后一轴上被掩蔽的元素使用一个非常大的负值替换,从而其softmax输出为0 X = d2l.sequence_mask(X.reshape(-1, shape[-1]), valid_lens, value=-1e6) return nn.functional.softmax(X.reshape(shape), dim=-1) # 对于第一个 batch,每个 num_keys 保留 2 # 对于第二个 batch,每个 num_keys 保留 3 masked_softmax(torch.rand(2, 2, 4), torch.tensor([2, 3])) >>> tensor([[[0.5980, 0.4020, 0.0000, 0.0000], [0.5548, 0.4452, 0.0000, 0.0000]], [[0.3716, 0.3926, 0.2358, 0.0000], [0.3455, 0.3337, 0.3208, 0.0000]]])masked_softmax(torch.rand(2, 2, 4), torch.tensor([[1, 3], [2, 4]])) >>> tensor([[[1.0000, 0.0000, 0.0000, 0.0000], [0.4125, 0.3273, 0.2602, 0.0000]], [[0.5254, 0.4746, 0.0000, 0.0000], [0.3117, 0.2130, 0.1801, 0.2952]]])加性注意力学习不同维度的查询与键的注意力。下面输出为实数. q 的大小为 query_size,k 大小为 key_sizeimage.pngimage.pngclass AdditiveAttention(nn.Module): """加性注意力""" def __init__(self, key_size, query_size, num_hiddens, dropout, **kwargs): super(AdditiveAttention, self).__init__(**kwargs) self.W_k = nn.Linear(key_size, num_hiddens, bias=False) self.W_q = nn.Linear(query_size, num_hiddens, bias=False) self.w_v = nn.Linear(num_hiddens, 1, bias=False) self.dropout = nn.Dropout(dropout) def forward(self, queries, keys, values, valid_lens): # 输入的 queries 的形状: (batch_size, num_queries, query_size) # 输入的 queries 的形状: (batch_size, num_keys, key_size) queries, keys = self.W_q(queries), self.W_k(keys) # - 在维度扩展 unsqueeze 后, # queries的形状:(batch_size,查询的个数,1,num_hidden) # key的形状:(batch_size,1,“键-值”对的个数,num_hiddens) # 使用广播方式进行求和 # - unsqueeze(n) 在第 n 维添加一维,长度为 1 features = queries.unsqueeze(2) + keys.unsqueeze(1) features = torch.tanh(features) # self.w_v仅有一个输出,因此从形状中移除最后那个维度。 # scores的形状:(batch_size,查询的个数,“键-值”对的个数) scores = self.w_v(features).squeeze(-1) self.attention_weights = masked_softmax(scores, valid_lens) # attension_weights.shape = (batch_size, num_queries, num_keys) # values的形状:(batch_size,“键-值”对的个数,值的维度) return torch.bmm(self.dropout(self.attention_weights), values) # return 的形状: (batch_size, num_queries, value_dim)# - queries: 2 个批量,分别 1 个 query,分别长度为 20 # - 这个 query 查询对所有 key 的权重,都是一样的(虽然参数随机生成,但过程中用到的参数一样) # - mask 仅保留前两个 key,所以其权重都是 1 / 2,结果 value 为前两个 key 所存 value 的均值 queries, keys = torch.normal(0, 1, (2, 1, 20)), torch.ones((2, 10, 2)) # values的小批量,两个值矩阵是相同的 values = torch.arange(40, dtype=torch.float32).reshape(1, 10, 4).repeat( 2, 1, 1) valid_lens = torch.tensor([2, 6]) attention = AdditiveAttention(key_size=2, query_size=20, num_hiddens=8, dropout=0.3) attention.eval() attention(queries, keys, values, valid_lens), values >>> (tensor([[[ 2.0000, 3.0000, 4.0000, 5.0000]], [[10.0000, 11.0000, 12.0000, 13.0000]]], grad_fn=<BmmBackward0>), tensor([[[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.], [16., 17., 18., 19.], [20., 21., 22., 23.], [24., 25., 26., 27.], [28., 29., 30., 31.], [32., 33., 34., 35.], [36., 37., 38., 39.]], [[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.], [12., 13., 14., 15.], [16., 17., 18., 19.], [20., 21., 22., 23.], [24., 25., 26., 27.], [28., 29., 30., 31.], [32., 33., 34., 35.], [36., 37., 38., 39.]]]))这两个 batch 对 10 个 key 的注意力分配:image.png缩放点积注意力原文很简洁:image.pngclass DotProductAttention(nn.Module): """缩放点积注意力""" def __init__(self, dropout, **kwargs): super(DotProductAttention, self).__init__(**kwargs) self.dropout = nn.Dropout(dropout) # queries的形状:(batch_size,查询的个数,d: 即 query_size) # keys的形状:(batch_size,“键-值”对的个数,d) # values的形状:(batch_size,“键-值”对的个数,值的维度) # valid_lens的形状:(batch_size,)或者(batch_size,查询的个数) def forward(self, queries, keys, values, valid_lens=None): d = queries.shape[-1] # 设置transpose_b=True为了交换keys的最后两个维度 scores = torch.bmm(queries, keys.transpose(1,2)) / math.sqrt(d) self.attention_weights = masked_softmax(scores, valid_lens) return torch.bmm(self.dropout(self.attention_weights), values)[done

读取每篇论文的引用次数,并按降序排序

2024-11-06
241102julyfunnoteswilliam工作

## USACO 2021 US Open, Silver Problem 3. Acowdemiahttps://usaco.org/index.php?page=viewproblem2&cpid=1136我们需要找到最大的 h 指数,即至少有 h 篇论文,每篇至少有 h 次引用。Bessie 可以通过调查文章增加引用次数,每篇调查文章最多引用 L 篇论文,总共可以写 K 篇调查文章。首先,将论文的引用次数降序排序,这样可以优先处理引用次数高的论文,减少需要增加的引用次数。然后使用二分查找来确定最大可能的 h 值。我们在 0 到 n 之间查找,通过中间值来验证是否能达到某个 h 指数。检查函数 ok(h) 用于验证是否能通过增加引用次数达到某个 h 指数。它统计当前已经有至少 h 次引用的论文,对于不足 h 次引用的论文,计算需要补充的引用次数,并检查总的可用引用次数是否足够。这种方法通过二分查找高效地逼近最大可能的 h,并确保找到了在给定约束下的最大 h 指数。n, k, L = map(int, input().split()) # 读取每篇论文的引用次数,并按降序排序 c = sorted(list(map(int, input().split())), reverse=True) # 定义一个函数来检查是否可以达到给定的 h 指数 def ok(h): cnt = 0 # 记录至少有 h 次引用的论文数量 tot = k * L # 可以分配的总额外引用次数(k 篇调查,每篇 L 次引用) # 遍历每篇论文的引用次数 for x in c: if x >= h: cnt += 1 # 如果该论文引用次数已经至少是 h,计入满足条件的论文数 continue # 计算该论文需要的额外引用次数以达到 h 次引用 if h - x <= tot and h - x <= k: tot -= h - x # 使用额外的引用次数 cnt += 1 # 计入满足条件的论文数 # 返回是否有至少 h 篇论文满足条件 return cnt >= h # 二分查找来确定最大可能的 h 指数 l, r, ans = 0, n, -1 while l <= r: mid = (l + r) // 2 if ok(mid): ans = mid # 如果当前的 h 可行,尝试更大的 h l = mid + 1 else: r = mid - 1 # 如果当前的 h 不可行,尝试更小的 h # 输出最大可能的 h 指数 print(ans)程序填空:n, k, L = map(int, input().split()) # 读取每篇论文的引用次数,并按降序排序 c = ___ # 定义一个函数来检查是否可以达到给定的 h 指数 def ok(h): cnt = 0 # 记录至少有 h 次引用的论文数量 tot = ___ # 可以分配的总额外引用次数(k 篇调查,每篇 L 次引用) # 遍历每篇论文的引用次数 for x in c: if x >= h: ___ # 如果该论文引用次数已经至少是 h,计入满足条件的论文数 continue # 计算该论文需要的额外引用次数以达到 h 次引用 if h - x <= tot and h - x <= k: tot -= ___ # 使用额外的引用次数 cnt += 1 # 计入满足条件的论文数 # 返回是否有至少 h 篇论文满足条件 return cnt >= h # 二分查找来确定最大可能的 h 指数 l, r, ans = 0, n, -1 while l <= r: mid = ___ if ___: ans = mid # 如果当前的 h 可行,尝试更大的 h ___ else: r = mid - 1 # 如果当前的 h 不可行,尝试更小的 h # 输出最大可能的 h 指数 print(ans)P6282 [USACO20OPEN] Cereal Shttps://usaco.org/index.php?page=viewproblem2&cpid=1039如果我们增加奶牛,即倒着求每个答案,最后倒着输出就行了。如果增加一头奶牛,又会出现什么情况呢?如果它最喜欢的麦片没有被选择,那么它就会选它,且不影响其他奶牛;如果它最喜欢的麦片被选择,因为它的优先级比其他牛都高,所以会把其他牛的麦片“抢”过来,其他牛只能“退而求其次”。递归求解即可,因为所有奶牛最多选两次,所以 solvesolve 函数的复杂度是 Θ(1)Θ(1) 的,整个代码的时间复杂度为 Θ(N)Θ(N)。实现方法见代码注释:cici​ 表示第 ii 头奶牛的喜好,hihi​ 表示拿走第 ii 种麦片的牛的编号,resiresi​ 表示移走 i−1i−1 头牛的答案,curcur 是计算答案的计数器。因为领麦片的牛越多,领到麦片的牛就越多,所以越往后面,curcur 就越大,故每次计算的时候 curcur 不需要清零。N = 123456 class Cow: def __init__(self, f, s): self.f = f self.s = s c = [Cow(0, 0) for _ in range(N)] h = [0] * N res = [0] * N cur = 0 def solve(x, y): global cur if h[y] == 0: h[y] = x cur += 1 elif h[y] > x: z = h[y] h[y] = x if y == c[z].f: solve(z, c[z].s) def main(): global cur n, m = map(int, input().split()) for i in range(1, n + 1): f, s = map(int, input().split()) c[i] = Cow(f, s) for i in range(n - 1, -1, -1): solve(i + 1, c[i + 1].f) res[i + 1] = cur for i in range(1, n + 1): print(res[i]) if __name__ == "__main__": main() 作业题 # P2997 [USACO10NOV] Banner Shttps://www.luogu.com.cn/problem/P2997平面上有(0,0)到(n,m)的(n+1)*(m+1)个点。问有多少点对所连的线段不过其他点,且长度在[l,h]范围

3-内存布局

2024-10-28
julyfunnotes大四上计算机体系结构

通用名词IR: 指令寄存器PC: 程序计数器PCB: 进程控制块,存储进程状态(阻塞),PID,计数器等指令jmpi 100, CS: CS = 0 | 跳转到第 0 段起始位置 + 100 的位置程序分段 SegmentLDT : Local Descriptor Table 局部段表,存储每个段的编号,起始,大小,权限分页 Page一个段可由若干逻辑页组成PT: 页表,将逻辑页映射到物理帧帧则是物理分块,和页分块大小一致多级页表首先考虑物理 4GB 内存被分为 1M 个大小为 4KB 的帧每个进程使用一些帧,用一个 Page 结构体存储:// 以下为猜测 struct Page: 32bit { valid: ?, frame_id: 20bit offset: 12bit // 20 + 12 刚好表示一个 byte 地址 sign: R/W } each process has page: Page[1M] (stupid design)这里每个页条目为 4B开了一兆结构体,浪费 4M 内存,这些结构体需要 1024 页存储故引入 1024 个 2 级页条目,表示第 i 个 2 级页是否使用(每个 2 级页最多可存储 4KB / 4 = 1024 个 1 级页),若使用则地址在哪里,省无用空

4-动态规划算法

2024-10-22
hrljulyfunnotes技术学习

策略评估已知策略 $pi$ ,状态转移函数 $P$ 和奖励函数也已知,求状态价值函数 $V^pi (s)$(一个期望)初始 $V^(t = 0)$ 任选,比如所有 $V^0 (s) = 0$建立方程 $V(s) = "加权" sum V("nxt"_s)$ (使用贝尔曼期望方程)这不就是带概率和 $r$ 的一个模拟么迭代直到 $V^k = V^(k + 1)$,可以证明会收敛策略提升用于求解最优策略。根据易证明的策略提升定理(到了下一步以后直接一直采用原策略,会获得一个期望,其不会更劣),评估 $pi$ 策略后,策略改为每一状态贪心选择最优的 $"argmax"_a Q^pi (s, a)$,策略就会在每个状态更优。策略提升就是反复贪心(提升)+ 重新迭代评估,直到策略不变。价值迭代上述方法是迭代评估 + 一轮提升,太慢。现在改为一轮评估 + 一轮提升。迭代过程中不维护 $a$,只维护状态价值函数。$$V^(k + 1) (s) = max_(a in A) { Q^k (s, a) }$$done

单一市场

2024-10-21
julyfunnotes大四上欧洲经济学

用中文解释以下知识点。对其中的重要名词(如人名,机构,事件)给出英文和法文:all by gpt从共同市场到单一市场功能主义方法:让·莫内的方法Jean Monnet (让·莫内) 是欧洲一体化的主要推动者之一。他的功能主义方法强调通过经济合作实现政治一体化。莫内认为,通过在特定领域的合作(例如煤钢共同体),可以逐步实现更广泛的欧洲统一。市场的角色:共同语言,共同利益市场在欧洲一体化中扮演了重要角色。通过经济合作,各国能够找到共同的语言和利益,这为进一步的政治和社会一体化奠定了基础。市场的统一使得资源、资本和劳动力可以在成员国之间自由流动,促进了经济的整体发展。欧洲一体化的细红线The thin red line of European integration 指的是欧洲一体化过程中需要谨慎处理的界限。即在保持国家主权和实现超国家一体化之间找到平衡。这条“细红线”代表了成员国在推进一体化时需要面对的挑战和妥协。重要名词翻译Jean Monnet (英文) / Jean Monnet (法文)Common Market (英文) / Marché Commun (法文)Single Market (英文) / Marché Unique (法文)European Integration (英文) / Intégration Européenne (法文)法律与附则单一市场的法律框架在欧盟的80,000页法律文件中,有30,000页专门用于规范单一市场。这些法律和附则确保了成员国之间的经济活动顺畅进行。三大原则欧盟理事会的多数决原则E Council (欧盟理事会): 决策依据多数原则,即55%的成员国同意,并且这些国家代表至少60%的欧盟人口。European Council (英文) / Conseil Européen (法文)原产国法律的相互承认各成员国承认其他成员国的法律,这有助于减少贸易壁垒,促进商品和服务的自由流动。欧洲公司的法律地位European Corporation (欧洲公司): 根据欧洲法律设立的公司,其法律地位不依赖于各国的税收协调。European Law (英文) / Droit Européen (法文)纳入国家法律体系这些欧盟法律和附则需要被纳入各成员国的国家法律体系,以确保法律的一致性和可执行性。单一市场的记录不平等Unequal (不平等): 单一市场在不同国家和地区之间的影响不均衡。一些国家可能受益更多,而另一些国家可能面临挑战。对不同类型市场的差异化影响Differentiated impact (差异化影响): 单一市场对不同类型的市场(如商品、服务、劳动力)影响各异。有些市场可能发展迅速,而另一些则可能发展较慢。缓慢但持续的过程A slow but continuing process (缓慢但持续的过程): 单一市场的整合是一个渐进的过程,尽管进展缓慢,但一直在持续推进。重要名词翻译Single Market (英文) / Marché Unique (法文

课堂计划

2024-10-19
241020julyfunnoteswilliam工作

Problem 1. MooBuzz - Shttps://usaco.org/index.php?page=viewproblem2&cpid=858二分法复习题。当确定等待上限为 $t$ 时,需要多少辆车可以模拟出来:即时间轴从左往右依次加入奶牛,记录奶牛数量和第一头奶牛的时间,若超时或满载则加一辆。因此可以二分找到最小的等待上限,若该上限可行则考虑变小,否则变大。伪代码:读入 n, m, c 和奶牛时间 li li 排序 def ok(t): 初始化变量(自行设计) 枚举第二头到最后一头奶牛: 如果超时或者满载: 换一辆新车 否则: 奶牛上车 返回车数量 <= 车限制 l, r = 0, int(1e9) while l < r: mid = l 和 r 的中点 如果 mid 可以 减小 r 否则 增大 ln, m, c = map(int, input().split()) li = list(map(int, input().split())) l, r = 0, int(1e9) li.sort() def ok(t): cnt = 1 st = li[0] cow = 1 for i in range(1, n): if li[i] - st > t or cow == c: cnt += 1 st = li[i] cow = 1 else: cow += 1 return cnt <= m while l < r: mid = (l + r) // 2 if ok(mid): # could be smaller r = mid else: l = mid + 1 print(l)Problem 2. MooBuzz - Shttps://usaco.org/index.php?page=viewproblem2&cpid=966找规律。每隔 15 个数中,被替代的数字形成一个循环,导致每 15 个数才会报出 8 个数。 最终报的数每过 8 个会增加 15,在 8 个以内则按照下表循环:0 1 2 3 4 5 6 7 1 2 4 7 8 11 13 14n = int(input()) - 1 g = n // 8 # 属于第几组 li = [1, 2, 4, 7, 8, 11, 13, 14] print(g * 15 + li[n % 8])Problem 3. Problem 1. Marathon这道题目是一道动规的题目。令f[i][j]代表到了第i个检查点,跳过了j个的最短距离。f[i][j]=min(f[i-l-1][j-l]+dis(i,i-l-1))复杂度为 O(n^3

Paper Reading

2024-10-19
julyfunnotes

255.12Diffusion Policy 架构精读: https://blog.csdn.net/v_JULY_v/article/details/1436517184.17 AnyGrasp2412.25RDT: https://github.com/thu-ml/RoboticsDiffusionTransformer24.10.31 pi0: https://www.physicalintelligence.company/blog/pi0ALOHA + ACT: https://github.com/tonyzhaozh/actOpenVLA: https://github.com/openvla/openvlaocto Open-Source Generalist Robot Policy: https://octo-models.github.io/2023 具身智能 survey: https://eai-vc.github.io/11.27Egomimic - RGB + handpose pretrainhttps://egomimic.github.io/Dart: Vision Pro 纯虚拟环境收集数据再看看 Pi0: 网络不适应夹爪,最后阶段 fine tune 一下夹爪 prompt?11.20清华的具身大模型: https://rdt-robotics.github.io/rdt-robotics/https://arxiv.org/html/2410.07864?_immersive_translate_auto_translate=1视觉模型 Sig跨具身模型 RTX 数据集: https://robotics-transformer-x.github.io/数据集下载: https://blog.csdn.net/qq_47572336/article/details/133592256?spm=1001.2014.3001.550211.18[ ] Diffusion 原理简述 (建议配合 GPT): https://www.mindspore.cn/tutorials/zh-CN/r2.4.0/generative/diffusion.htmlopencv-python 功能列表: https://opencv-python-tutorials.readthedocs.io/zh/latest/4.%20OpenCV%E4%B8%AD%E7%9A%84%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86/4.5.%20%E5%BD%A2%E6%80%81%E5%8F%98%E6%8D%A2/11.16Diffusion 生成 Floor Plan. https://arxiv.org/pdf/2410.11908v1https://github.com/luozn15/FloorplanGAN/blob/master/RPlan_EDA.ipynbFloor layout GAN: https://dl.acm.org/doi/abs/10.1145/3570991.357105711.13UMI pretrain 单一夹爪泛化 action: https://umi-gripper.github.io/fastumi: https://fastumi.com/差不多的: https://robotutilitymodels.com/robot data scailing laws: https://data-scaling-laws.github.io/11.6[ ] #[hand, rgb] RGB 重建手部 mesh: https://github.com/geopavlakos/hamer10.29[ ] https://arxiv.org/abs/2404.08636: 探索大模型的 3D 泛化识别 Probing the 3D Awareness of Visual Foundation Models10.26[x] 形同我写的 IK 的 RelexedIK 2018: https://m.roboticsproceedings.org/rss14/p43.pdf优化用 scipy slsqp10.19[ ] 无 teleoperation 的 mocap 灵巧数据采集: https://dex-cap.github.io/手部数据采集用的是电磁场手

k-means-n-hac-n-dbscan

2024-10-16
julyfunnotes大四上机器学习

K means目标:自动分 k 类步骤开始随机选 k 个作为 k 类中心点repeat:新点添加到最近中心点更新类别平均中心点HAC最小生成簇,在 $n^2$ 个边中选择 distance 最小的边合并。GPT:Complete Linkage(最大链接):计算两个簇之间的距离时,使用两个簇中所有点之间的最大距离。结果是形成紧密的、相对球形的簇。对噪声和离群点较为敏感。Single Linkage(最小链接):计算两个簇之间的距离时,使用两个簇中所有点之间的最小距离。可能导致“链式效应”,形成长而稀疏的簇。对噪声和离群点较不敏感。DBSCAN 算法“密度相连”的点(由某个高密度的点可到达它们) $<==>$ 两点在一个聚类簇到达者,沿途必须是高密度点see: https://cloud.tencent.com/developer/article/166488

GGHH ; G + H 必须 H 包含所有 H

2024-10-09
241013julyfunnoteswilliam工作

解救小哈 - BFS 版本讲解使用队列存储到达过的点,对队列中的每一个点再向四个方向拓展。最优性:最近的点会最早进入队列程序填空:from collections import deque q = deque() n, m, t = map(int, input().split()) sx, sy, tx, ty = map(int, input().split()) a = [[0 for _ in range(m + 1)] for _ in range(n + 1)] step = [[-1 for _ in range(m + 1)] for _ in range(n + 1)] for _ in range(t): x, y = map(int, input().split()) a[x][y] = 1 def ok(x, y): return 1 <= x <= n and 1 <= y <= m and a[x][y] == 0 and step[x][y] == -1 d = ((0, 1), (0, -1), (1, 0), (-1, 0)) q.append((sx, sy)) step[sx][sy] = 0 while len(q) > 0: x, y = q.popleft() for i in range(4): nx, ny = x + d[i][0], y + d[i][1] if ok(nx, ny): q.append((nx, ny)) step[nx][ny] = step[x][y] + 1 print(step[tx][ty]) 3 3 2 1 1 3 1 2 1 2 2Leadershttps://usaco.org/index.php?page=viewproblem2&cpid=1275观察规律:若 G + H 组合,则 H 必须包含后面全部 H,且前面的 G 是第一个且包含全部 G,或 G 包含此 H。判断时,使用最早出现的 H 和 G 判断n = int(input()) s = input() p = list(map(int, input().split())) p = [(x - 1) for x in p] fh, fg = -1, -1 lh, lg = -1, -1 for i in range(n): if s[i] == 'H': lh = i if fh == -1: fh = i else: lg = i if fg == -1: fg = i ans = 0 # GGHH ; G + H 必须 H 包含所有 H if p[fh] >= lh: # fh and some g before that for i in range(fh): if p[i] >= fh or (i == 0 and p[i] >= lg): ans += 1 if p[fg] >= lg: for i in range(fg): if p[i] >= fg or (i == 0 and p[i] >= lh): ans += 1 print(ans)n = int(input()) s = input() p = list(map(int, input().split())) p = [___ for x in p] fh, fg = -1, -1 lh, lg = -1, -1 for i in range(n): if s[i] == 'H': ___ if fh == -1: ___ else: ___ if fg == -1: ___ ans = 0 # GGHH ; G + H 必须 H 包含所有 H if p[fh] >= lh: # fh and some g before that for i in range(fh): if ___ ans += 1 if p[fg] >= lg: for i in range(fg): if p[i] >= fg or (i == 0 and p[i] >= lh): ans += 1 print(ans)# P2385 [USACO07FEB] Bronze Lilypad Pond Bhttps://www.luogu.com.cn/problem/P2385经典的 bfs 题目,但此题每个拓展点有八个方向进行选择,类似于象棋马步创建空队列 将起点放入队列 while 队列不空: 取出并弹出队首 u 将 u 的八个方向判断是否在边界内且为莲花或终点 将可行且没走过的点加入队列 输出终点距离 python deque: push: d.append(4) / a.appendleft(4) front: d[0] pop: d.popleft() / d.pop(

理解 SE3 变换矩阵

2024-10-09
julyfunnotes数学基础

$"target" A "source" B$ 为 $R, t$ 的意义又称 parent A child B, A from B表示任意向量在 B 坐标系下的表示法 $v_B$ 和 A 下表示法 $v_A$ 满足 $v_A = R v_B + t$几何意义:表示 A 坐标系三轴在自身坐标系下先平移 $t$,然后新 $x$ 轴为 $R$ 的第一列向量(A 坐标系意义下),新 $y$ 轴为 $R$ 第二列向量,新 $z$ 轴为 $R$ 第三列向量变换矩阵乘法的意义$A <- B$ 表示 A from B 的变换$v_A = (A <- B) dot (B <- C) dot bold(v_C) = A <- C dot v_C$可以认为 A 到 C 三轴几何变换方式为先按照 $A <- B$ 平移 + 旋转,再按照 $B <- C$ 平移 + 旋转经过测试,四元数,欧拉角和旋转向量的几何意义均为从 $A$ 的旋转到 B 的三轴注意到 $(A <- B) dot (B <- C)$ 可理解为左边矩阵变换了右边矩阵的向量Example已知Unity 左手系下 world from A 变换为 M对所有左手系,定义附属右手系为...(一种变换)求 world 附属右手系 from A 附属右手系的变换事实上后来还求了 A1 附属右手系 from A2 附属右手系等解法$v = (t, q) = (x, y, z, w, x, y, z)$ 这是 world from target$q_"反 y 右手系, world from A" = v * (1, -1, 1, 1, -1, 1, -1)$world 和 A 都转为 y 轴相反的右手系看待了,此时几何变换平移向量不变,但表示法的 y 分量取反,但要保证旋转向量的大小和转向不变注意左手系旋转正方向是正方向看原点的顺时针注意到附属右手系几何上可以先绕自己 $y$ 轴旋转 90 读,再绕 z 轴旋转 -90 度得到 反 y 右手系return $M_"绕自己 y 转 90 度" * M_"绕自己 z 转 -90 度" * M_"反 y 右手系"

梯度,散度,旋度,Laplace, nabla

2024-10-09
julyfunnotes数学基础

这里 $x_i^->$ 表示一个方向的单位向量nabla可当做一个向量看待$$limits(nabla)^-> eq.def sum_i x_i^-> diff / (diff x_i) $$梯度$$"grad"(f) eq.def limits(nabla)^-> f = sum_i x_i^-> (diff f) / (diff x_i)$$输入 $f$: $RR^n -> R$ 标量场,输出向量场.$nabla f$ 对于一个向量输入,输出一个向量散度$$"div"limits(F)^-> eq.def limits(nabla)^-> dot limits(F)^-> = sum_i (diff F_x_i) / (diff x_i) $$输入向量场,输出标量场旋度$$"curl" limits(F)^-> eq.def nabla times limits(F)^->$$Laplace$$laplace eq.def sum_i (diff ^ 2) / (diff x_i^2)$$输入标量场,输出标量场(先做梯度运算,再做散度运算)Laplace 算子的极坐标,柱坐标和球坐标表示: ref: https://zhuanlan.zhihu.com/p/193094897$laplace = (diff ^ 2) / (diff r ^ 2) + 1 / r diff / (diff r) + 1 / (r ^ 2) (diff ^ 2) / (diff theta ^ 2) + (diff ^ 2) / (diff z ^ 2)

Plot the frequency spectrum

2024-10-08
julyfunnotes数学基础

数学形式$$F(omega) = integral_(-oo)^(+oo) f(t) e^(-i t x) dif t$$ $$ f(t) = cal(F)^(-1)[F(omega)] = 1 / (2pi) integral_(-oo)^(+oo) F(w) e^(i w t) dif omega $$ ref: https://the-art-of-programming-by-july.readthedocs.io/en/latest/ebook/zh/%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2%E7%AE%97%E6%B3%95%E3%80%81%E4%B8%8A/FFT 求频谱相关FFT 就是快速 DFT。你的数据采样间隔 $T_s$,采样 $N$ 次,采样周期 $T_0 = N T_s$做 FFT 并绘制,你将得到最大频率 $1 / (2 T_s)$,基准频率(分度值)为 $1 / (N T_s)$ 的频谱:N = len(x) # Number of samples T = 1.0 / 200.0 # Sampling interval (1/200 Hz) yf = np.fft.fft(x) # Compute the FFT 频率分量 xf = np.fft.fftfreq(N, T)[:N // 2] # 获取实际频率作为横轴 # Plot the frequency spectrum plt.plot(xf, 2.0 / N * np.abs(yf[:N // 2])) # Normalize and plotref: https://zhuanlan.zhihu.com/p/620462217 含有 FFT 算法证明verified using sin wave (generate + fft) on 24.8.2

教学计划-找规律II

2024-09-29
240929julyfunnoteswilliam工作

Circular Barnhttps://usaco.org/index.php?page=viewproblem2&cpid=1255首先考虑一个房间内如果一直拿,谁会赢。从 1 开始推导,发现当数量为 4k 时,后手赢,其他先手赢。需要拿几次可以取完?如果后手赢,那么先手要尽可能让对方赢所需拿的次数多一点。如果先手赢,每个房间遵循尽快赢的策略。有,若偶数,则次数为 i // 2,否则若为 4k + 1,则取最大质数满足取完后为 4k,而 4k + 3 类似: if i % 2 == 0: towin[i] = i / 2 elif i % 4 == 1: if once[i]: m1 = i towin[i] = 1 else: towin[i] = (i - m1) / 2 + 1 elif i % 4 == 3: if once[i]: m3 = i towin[i] = 1 else: towin[i] = (i - m3) / 2 + 1首先用质数筛筛出质数。对于取完次数为 k 的房间,需要第 k / 2 + 1 轮到这个房间才能有人输。N = int(5e6) once = [True] * (N + 1) prime = [] for i in range(2, N + 1): if once[i]: prime.append(i) for j in range(len(prime)): v = prime[j] if v * i > N: break once[v * i] = False if i % v == 0: break m3 = 3 # largest i: 4i + 3 prime m1 = 1 towin = [0, 1, 1, 1] + [0] * int(N + 10) for i in range(4, int(N + 1)): if i % 2 == 0: towin[i] = i // 2 elif i % 4 == 1: if once[i]: m1 = i towin[i] = 1 else: towin[i] = (i - m1) // 2 + 1 elif i % 4 == 3: if once[i]: m3 = i towin[i] = 1 else: towin[i] = (i - m3) // 2 + 1 t = int(input()) for _ in range(t): n = int(input()) a = [0] + list(map(int, input().split())) firstmin = 1e9 win = 0 for i in range(1, n + 1): rd = towin[a[i]] // 2 + 1 if rd < firstmin: firstmin = rd win = towin[a[i]] % 2 if win == 1: print("Farmer John") else: print("Farmer Nhoj")Sleepy Cow Herdinghttps://usaco.org/index.php?page=viewproblem2&cpid=918最少的步数:假设最后所有奶牛集中到 p ~ q,显然有 a[0] <= p < q <= a[n - 1],长度为 n,那么发现任意指定一个 p ~ q,每一步都可以把一头在外面的奶牛移进来。只需要双指针法找到长度为 n 的包含奶牛个数最多的区间就行。最多的步数:定义总距离为每对相邻奶牛之间距离 - 1 的和。如果边缘有两头奶牛相邻,发现每步一定可以只让距离减 1,而第一步一定会把两端移到中间某个位置,故最优方案就是两端先造成一个相邻,之后不断减 1n = int(input()) a = [int(input()) for _ in range(n)] a.sort() t = 0 minans = 1e9 for s in range(n): while t + 1 <= n - 1 and a[t + 1] - a[s] + 1 <= n: t += 1 minans = min(minans, n - (t - s + 1)) print(minans) totdis = a[n - 1] - a[0] - (n - 1) print(totdis - min(a[2] - a[1], a[n - 1] - a[n - 2]) + 1)作业题:COW Operationshttps://usaco.org/index.php?page=viewproblem2&cpid=123

3-马尔科夫决策过程

2024-09-26
hrljulyfunnotes技术学习

ref: https://hrl.boyuai.com/chapter/1/%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E5%86%B3%E7%AD%96%E8%BF%87%E7%A8%8B状态转移矩阵 $cal(P)$,表示状态对转移概率,为方阵,第 $i$ 行第 $j$ 个表示 $s_i$ 转移到 $s_j$ 概率MRP 问题下方 $s$ 表示状态集合中的元素,$S_t$ 表示某时刻状态取值 <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream <<<<<<< Updated upstream$R_t$: 随机变量,$t$ 时刻获得的奖励(实际)$r(s)$: 转移到状态 s 获得的奖励的期望 =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes =======$R_t$: 随机变量,$t$ 时刻获得的奖励$r(s)$: 转移到状态 s 获得的奖励的期望******Stashed changes$G_t$: 一个马尔科夫过程中,从状态 $S_t$ 开始到无穷步后衰减奖励之和$gamma$: 这里引入了衰减系数,则有 $G_t = R_t + gamma R_(t + 1) + gamma^2 R_(t + 2).. = sum_(k = 0)^oo gamma^k R_(t + k)$$V(s)$: 价值函数, 为一个状态的期望回报 $= EE[G_t | S_t = s] = EE[R_t + gamma V(S_(t + 1)) | S_t = s] = r(s) + gamma sum_(s^prime in S) p(s^prime | s) V(s^prime)$上一行等号最右边叫做贝尔曼方程,由 V 和邻接 V 组成$cal(V) eq.def [V(s_1) ... V(s_n)]^T$奖励函数列向量 $cal(R)$ 由 $r(s_i)$ 组成贝尔曼方程矩阵形式: $cal(V) = (I - gamma cal(P))^(-1) cal(R)$ 此法复杂度 $n^3$,不适用于大数据MDP 问题$A$:动作集合$r(s, a)$:期望奖励同时取决于状态和动作$P(s^prime | s, a)$ :状态转移概率也是,故马尔可夫矩阵不再有用策略$pi(a | s)$:状态 $s$ 下采取 $a$ 的概率$V^pi (s) eq.def EE_pi [G_t | S_t = s]$ 状态价值函数 state-value function,即还不确定 $a$$Q^pi (s, a) = EE_pi [G_t | S_t = s, A_t = a]$ 动作价值函数 action-value function,即确定了 $a$有 $V^pi (s) = sum_(a in A) pi(a | s) Q^pi (s, a)$有 $Q^pi (s, a) = r(s,a) + gamma sum_(s^prime in S) P(s^prime | s, a) V^pi (s^prime)$$s -->^pi a_i -->^P s^prime$贝尔曼期望方程代入即可,要么由 V 和邻接 V 组成,要么由 Q 和邻接 Q 组成将 $V^pi (s)$ 表示为关于下一个状态的等式将 $Q^pi (s, a)$ 同样表示为关于下一个状态和动作的等式image.png$A$ 和 $S$ 的例子image.png边缘化求状态价值函数边缘化:将 MDP 转化为 MRP:状态期望奖励 = 所有动作奖励 $times$ 动作概率,$"状态转移到 s' 概率" = "所有动作转移到 s' 概率" times "动作概率"$蒙特卡洛方法随机采样若干条序列,计算统计回报,用于计算状态价值函数$V(s) <- V(s) + 1 / N(s) (G - V(s))$, 这是增量更新,$G$ 由实际采样计算得到代码实现更新方法:先获得一个序列,对该序列从后往前计算def MC(episodes, V, N, gamma): # 这里 episode 是一个采样序列 for episode in episodes: G = 0 # 由于 G 的定义跟后续状态有关,只能从后往前计算. # 所以最后一个状态没有良好的 G(G = 0) for i in range(len(episode) - 1, -1, -1): (s, a, r, s_next) = episode[i] G = r + gamma * G N[s] = N[s] + 1 V[s] = V[s] + (G - V[s]) / N[s]占用度量$nu_0 (s)$ : MDP 的初始状态分布(在状态 $s$ 的概率)$P_t^pi (s)$ : 策略 $pi$ 下智能体 $t$ 时刻为状态 $s$ 的概率$nu^pi (s)$ : 状态访问分布,$nu^pi (s) = (1 - gamma) sum_(t = 0)^oo gamma^t P_t^pi (s)$ ,指策略下所有步在状态 $s$ 的概率的衰减加权和似乎需要确定 $nu_0$.性质(离散形式类似于 MDP 贝尔曼期望方程):image.png$rho^pi (s, a) space eq.def space (1 - gamma) sum_(t = 0)^oo gamma^t P_t^pi (s) pi (a | s)$ : 占用度量,就是动作状态访问分布,等于状态访问分布乘动作权重,表示策略下所有步在该(状态-动作对)的概率的衰减加权和定理 1: 占用度量相同 $<==>$ 策略相同定理 2: 合法占用度量 $rho$ ,可生成该占用度量的唯一策略为:$$pi_rho (s, a) = rho(s, a) / (sum_(a^prime) rho(s, a^prime)) $$最优策略定理:有限状态和动作集合中,必然存在一个策略,在任意状态下的状态价值函数均不劣于其他策略感性上确实能理解$V^(s), Q^(s, a)$ : ...重要:$V^* (s) = max_(a in cal(A)) Q^*(s, a)$,只需选最好的一个动作即可。这是一个循环依赖,需要解方程贝尔曼最优方程由上面导出image.pn

torch.Size([2, 1, 6])

2024-09-26
d2ljulyfunnotes技术学习

语法n 批量矩阵乘法X = torch.ones((2, 1, 4)) Y = torch.ones((2, 4, 6)) torch.bmm(X, Y).shape # torch.Size([2, 1, 6])Nadaraya-Watson 核回归思想若训练数据包含若干 $x_i, y_i$ 对,则测试输入为 $x$ 时,将对每个训练数据分配一个权重(注意力权重),最终测试输出为 $f(x) = sum_(i - 1)^n alpha (x, x_i) y_i$。Nadaraya 的想法如下: $$alpha(x, x_i) = K(x - x_i)$$$x$ 被称为查询,$x_i, y_i$ 为键值对,这就是在查询 $x$ 和 $x_i$ 键之间的注意力权重其中 $K$ 可设计。例如,设计为 $K(u) = 1 / (sqrt(2 pi)) exp(- u^2 / 2)$,则推导出 $$f(x) = sum_(i = 1)^n "softmax"(-1 / 2 (x - x_i)^2)y_i$$这对 $x$ 的分布有要求。因此改进为带参数的注意力汇聚模型,额外学习一个 $w$ 参数使得:$$ f(x) = sum_(i = 1)^n "softmax"(-1 / 2 ((x - x_i)w)^2)y_i $$使用平方损失函数 nn.MESLoss 和随机梯度下降 nn.optim.SGD(lr=0.5) 进行训练。得到的注意力热图为:image.png(此图中任意一条横线表示一个测试输入 $x$ 下对整条 $x$ 轴的权重分配)学到的 $w$ 很小,使注意力更多分配到最近的 $x$。done

教学计划-找规律

2024-09-21
240921julyfunnoteswilliam工作

Problem 3. Spaced Outhttps://usaco.org/index.php?page=viewproblem2&cpid=1088从小规模数据开始绘制,发现要么第一行确定后,每一行与上一行相反。要么第一列确定后,每一行与上一行相反。证明:首先考虑第一行存在连续的 11 或者 00 情况我们用 f[j][0] 表示第一行第 j 列为 0 时,整个第 j 列的收益,f[j][1] 相反。n = int(input()) f = [[0, 0] for _ in range(n)] v = [[0, 0] for _ in range(n)] for i in range(n): s = list(map(int, input().split())) for j, x in enumerate(s): f[j][(i + 1) % 2] += x v[i][(j + 1) % 2] += x ans1 = 0 for x, y in f: ans1 += max(x, y) ans2 = 0 for x, y in v: ans2 += max(x, y) print(max(ans1, ans2))程序填空:n = int(input()) f = [[0, 0] for _ in range(n)] v = [[0, 0] for _ in range(n)] for i in range(n): s = list(map(int, input().split())) for j, x in enumerate(s): f[___][___] += x v[___][___] += x ans1 = 0 for x, y in f: ans1 += __ ans2 = 0 for x, y in v: ans2 += ___ print(max(ans1, ans2))Problem 3. Moo Route大胆猜测如果能不改方向就不改。往右走如果遇到剩余次数为 0 就掉头。往左走如果左边剩余次数 <= 2 且右边还有可以走的就掉头。否则就回不来了。n = int(input()) a = list(map(int, input().split())) + [0] s = sum(a) p = 0 d = 1 for _ in range(s): if (d == 1 and a[p] == 0) or (d == -1 and a[p - 1] <= 2 and a[p] > 0): d = -d if d == 1: print("R", end='') a[p] -= 1 else: print("L", end='') a[p - 1] -= 1 p += d读题 + 思考USACO 2022 December Contest, SilverProblem 2. Circular Barnhttps://usaco.org/index.php?page=viewproblem2&cpid=125

1-概述

2024-09-20
julyfunnotes技术学习计网

part1: https://blog.csdn.net/weixin_50295745/article/details/129938124part2: https://blog.csdn.net/weixin_50295745/article/details/130569786 节点: 手机电脑路由器,链路: 有线和无线连接历史阶段1983 TCP/IP,分组交换网 ARPANET未商业化三级树形结构: 主干网 - 地区网 - 局域网ISP (Internet Service Provider).ISP 例如移动联通IXP 允许地区 ISP 交换不经过主干 ISP90 年代 www 出现树形: 主干 ISP - 主干 ISP(可互连接) - 地区 ISP - 本地 ISP - 校园网 / 公司 - 主机标准化机构不说了。边缘部分(终端,不负责转发数据)通信方式CS(Client/Server)P2P(Peer to Peer): 任何主机可以是客户端也可以是服务器分组交换打电话会独占链接,不适合网络传输。路由器存储转发过程:暂存收到的分组检查分组头部查找转发表(由路由器动态维护)按头部的目的地址,找到合适的接口转发出去 #qm what's 接口?分组交换缺点:排队延迟不保证带宽,不保证谁用的多谁用得少头部信息开销复用技术: #qm for what?频分复用 - 不同包调频时分复用 - 时间片轮转统计复用报文交换: 部分流水线化(太慢了)计网分类PAN (Personal Area Network) 10m 就是热点LAN (Local) 一公里,高速通信线路例如学校内MAN (Metropolitan) 城市WAN (Wide) 很远使用者: 分为公用网,专用网(校园公司网)把终端接入网络的网络: AN. 居民不太方便直接接入 ISP,需要一个路由器中转性能速率 bit/s 通常指额定速率,不是实际运行速率带宽 bit/s : 一个信道可通过的理论数据率,可以认为控制吞吐量: 就是实际带宽,还是 bit/s注意 1M bit/s 是 1e6,而 1MB 是 $2^20$时延发送时延 = 数据长度 / 速率传播时延 = 传播距离 / 传播速率 (光纤为 2 / 3 光速)排队时延处理时延三大类交换的区别报文交换可以一段路走到黑,也可以分开几段走分组交换数据报交换: 是最基本的分组交换虚电路交换: 不用分配带宽,不会占用固定线路(可交叉) #qm 啥玩意交换时间计算分组交换网络: 如果有 n 个交换节点,总时间 T = 第一个节点发送所有组数据 + 剩下 (n - 1) 节点转发完最后一组的时间 (因为至少要接收到一组数据才能开始转发)报文交换,每个节点都要消耗全部分组时间电路交换,建立好链接的前提下只有一个节点的时间时延带宽积传播时延 × 带宽。这是对于传输链路计算的,衡量链路是否被充分利用。可理解为发送端发出但未到达接收端的 bit 量(管道里滞留的信息量)往返时间 RTT从发送方送完数据到发送方收到接收方回复的时间。计算方式,在这里就是 $2 times "传播时延" + "校验时间" + "确认包的发送时延"$:计算有效数据率: $"有效数据率" = "数据长度" / "实际消耗总时间" = "数据长度" / "发送时间 + RTT"$,代表从开始发送到确认对方收到整个过程的速率。题目可能会直接给 RTT,让你计算有效数据率之类的。利用率信道利用率: 信道用多大比例的时间是被使用的。利用率也不是越高越好,$D_"网络当前时延" = D_(0 "空闲时延") / (1 - U_"利用率")$网络利用率: 全网络信道利用率的加权平均体系结构Arpanet 提出的抽象方法:抽象分层统一标准模块独立协议与划分层次ISO 提出了 OSI(open system interconnection) 7 层理想模型,但是实际上不采用。计网体系结构定义:定义层次定义层次内部协议,即这个层次要实现的功能协议只是规则,具体实现由厂商来做协议语法: 数据格式语义: 格式表达含义和功能同步: 完成一个任务需要的操作和时序,例如 TCP 的握手层内功能:差错控制: 可靠性流量控制: 发送速率必须使得接收端来得及接受分段和重装: 传输大数据时需要分段,接收端还原复用和分用: 发送端几个高层会话复用一个低层连接,接收端分用还原连接建立和释放: 交换数据前建立一条逻辑连接,数据传输完毕后释放物流分层示例:TCP/IP 四层模型不是严格的标准,现在通用的是五层模型:应用层: 进程间交换信息,为用户服务 | https传输层: 在两台主机的进程之间传输数据。上一层是用这个数据,传输层是传这个数据 | TCP(稳定链接,可靠数据) UDP (无连接,最快传输服务)网络层: 为不同主机提供通信服务,包括路由选择(通过算法为路由器生成转发表)和转发(依据转发表将分组发送到下一个路由器) | IP 协议,数据单位为 IP 数据报数据链路层: 实现相邻节点的可靠通信 | 以太网 or WiFi,数据单位为帧,做差错检验, MAC 地址物理层: 传输 bit | 协议规定物理接口的规格,几根引脚,如何链接应用层确定用法,传输层 tcp 确定进程,网络层 ip 确定主机,链路层从 bit 流中划分数据,物理层确定物理属性每一层都有一种数据传输单元 (PDU),主机虽然不同,但协议和 PDU 封装解封规则一样.路由器不需要最上面两层,顺着下面三层解析 IP 就行。每多一层协议,↑就会多一层 header实体,协议,服务,服务访问点实体就是那一层东西协议: 同一层实体之间沟通的约定服务: 下层实体为上层实体提供功能接口服务上下层沟通需要用到交换服务原语 #qm接口就是服务访问点 SAP (Service Access Point)OSI 七层架构与上述架构的区别将应用层拆层了三个,又称资源子网应用层: app表示层: 统一不同系统之间的数据格式差异会话层: 建立进程之间的通信会话传输层: 运行精简的的 tcp & udp 为会话层提供服务底下三层: 通信子网流量控制在不同层的区别传输层 - https: 端到端流量控制网络层 - ip: 整个网络链路层: 两个相邻节点tcp 流量控制详细见: https://blog.csdn.net/qq_17347313/article/details/107283556考点PDU & 功能| 层 | PDU | 功能 | | --- | ------------------- | --------- | | 物理层 | bit | bit 传输 | | 链路层 | 保证帧内无差错 | | | 网络层 | 分组(数据报) | 路由,连接异构网络 | | 传输层 | tcp: 报文段 udp: 用户数据报 | | | 会话层 | | | | | | | | 应用层 | | 各种应用协议 |数据控制差错控制(内部校验),可靠传输,流量控制(点对点局部控制):链路层网络层传输层都有拥塞控制:链路层没

2-物理层

2024-09-20
julyfunnotes技术学习计网

功能:屏蔽不同传输媒体和通信手段之间的差异,为上层提供一个统一的 bit 传输服务至于怎么屏蔽就是物理层的协议,又称规程接口特性:机械特性:形状,引线数目,固定和锁定装置电气特性:电压,阻抗,速率(如 20kb/s)功能特性:某一个电气特性代表什么含义 - 比如每个引脚高电平代表什么,低电平代表什么过程特性:规定接口上发生的各种事件的时间顺序数据通信系统的模型三大部分:发送端 = 信源 + 发送器传输网络接收端 = 接收器 + 信image.png信道编码调制信道通信:源和终点时间传输信息信道:传输的通道。分为单工,半双工,全双工传输的内容:信息:你要表达的意思消息:信息的载体。如图片数据:消息的实体。例如比特和模拟数据信号:消息的载体。数字信号和模拟信号调制最开始产生的信号叫做基带信号,信号之间会干扰(比如频率相同)调制方法:基带调制:对基带信号进行波形变化,例如用高低电平表示 0 1带通调制:使用载波将基带信号的频率提高,并且变成模拟信号调制是变成模拟信号,编码是变成数字信号考点:数字信号和模拟信号的转换关系数字转数字使用数字发送器搭配若干数字信号编码数字转模拟调制器调制方法模拟转数字PCM (脉冲编码调制),例如 CD 采样采样(两倍频率才能无损),量化(分级),二进制编码(128 级为 7 为编码)模拟转模拟放大器和调制器模拟信号加载到再摸信号传输,如电话机 ☎️数字信号编码: 01 => 电平不归零制(NRZ):用高低区分 01无时钟信息,需要搭配时钟使用否则无法区分连续的 0/1归零制(RZ):每个周期末端归零表示同步信息如图为单极性归零原理:image.png曼彻斯特:用一个跳变表示一个比特。比如高跳低位 1,低跳高为 0。自带同步信息所以最常用差分曼彻斯特编码反向不归零制(NRZI) - 什么玩意image.pngk'j#跳过 调制:将 01 => 正弦波ASK: 用幅度区分 0 1FSK:用频率区分 0 1调相:用相位区分 0 1信道的极限容量奈氏定律: #跳过香农定律:若带宽 $W$,信号平均功率 $S$,高斯噪声功率 $N$ 则最高速率 $$ C = W log_2 (1 + S / N) ("bit" slash s) $$信噪比 (dB) = $10 log_10 (S slash N) ("dB")$#跳过 速率计算物理层下的传输媒介导引型:电磁波沿着固态媒体传播非导引型:自由空间传播(无线技术)频谱:image.png导引型传输媒体双绞线:两根铜线发射的电磁波相互抵消UTP: 无屏蔽双绞线STP: 屏蔽双绞线,贵且需要接地,抗干扰如何购买:image.png同轴电缆:绝缘保护套层 + 外导体屏蔽层 + 绝缘层(厚)+ 内导体,但不用了光纤:电转光 => 全反射传输 => 光转电。光纤是数字信号,亮暗为 01多模光纤:折射次数多,强度衰减快,搭配发光二级管这样的低质量光源,局域网连接用的多,远距离需要中继器单模光纤:折射角度极小光源:半导体激光器远距离传输BASE10: 同轴电缆BASE-T:双绞线BASE-F: 光纤非导引型传输媒体微波:不能绕行,会穿透电离层,接力方法:卫星同步卫星:GPS地轨道卫星:星链地面微波接力:蜂窝网络信道复用技术频分复用 FDM: 一个用户自始至终占用一个频带。容量小时分复用 TDM: 用户按照时间片轮转占用,每次占用全部频段。容量也小统计时分复用 STDM: #跳过波分复用:光信号分频k'j率补充: 中继器、集线器、网桥、交换机、路由器、网关的区别https://blog.csdn.net/weixin_30297281/article/details/96976846?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EPaidSort-1-96976846-blog-21070807.235%5Ev43%5Epc_blog_bottom_relevance_base9&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7EPaidSort-1-96976846-blog-21070807.235%5Ev43%5Epc_blog_bottom_relevance_base9&utm_relevant_index=1中继器: 仅放大信号集线器 HUB: 碰撞检测 + 再生整形放大,不记录 MAC,广播发送,工作于物理层网桥:是数据链路层设备,隔离子网。连接两个集线器交换机: 多对多通信路由器:网络层设

3-数据链路层

2024-09-20
julyfunnotes技术学习计网

概述数据链路层负责将 bit 分成若干帧封装成帧 + 透明传输只有链路层加帧首和帧尾。因为只有这层用于定界,其他首部只是附带信息MTU: 最大传送单元定界符 + 字节填充法指定帧开始符和帧结束符 SOH 和 EOT。帧内数据的 SOH, EOT 和 ESC 前面都加 ESC0 比特填充:定界符不限长度 #qm也可以在物理层特殊编码(0 1 以外)表示帧定界。差错控制纠错码:海明码等,找到错误位置,用于频繁出错处(如无线链路)检错码:奇偶校验 / CRC 校验,错了就丢弃 + arq 重发 (arq: 确认+重传机制确保可靠),用于光纤等image.png奇偶校验:奇偶校验核心就是补充校验位后让1的数量是奇/偶数个 比如奇校验,00101变成001011无差错和无错误:无差错是以接近 1 的概率无误PPP 协议用于两个节点之间建立点对点协议,适用于远程访问等场景PPP 子协议:LCP 链路控制协议 身份验证 链路管理 + NCP 网络控制协议 与网络层协议配合PPP 协议:image.png同步传输: 面向比特传输,定界符为 bit 序列。例如定界符是 01111110,则一旦发现五个连续 1,就插入一个 0,接收端遇到 5 个连续 1 就忽略后面的 0异步传输:以字节为单位,用字节填充法保证透明传输 (防止传输的内容对帧定界造成干扰)#跳过广播信道链路层一般称局域网 = 以太网。其实还有令牌环网和 FDDI。以太网适合多点接入的局域网本质上所有机器共享一条总线信道,一定会发生碰撞静态分配:适用于用户少的场景频分复用,时分复用 ...动态分配:bandwidth 会动态分配随机接入受控接入以太网为什么快:直接发帧,不建立逻辑连接和确认身份功能精简,消除比特差错,忽略传输差错曼彻斯特编码,自带同步信息便于广播只需要广播的时候附带目标 mac,只有 mac 地址匹配的才会做出响应网卡image.png功能:向上在操作系统中安装驱动,向下实现以太网协议CSMA / CD 协议 #在后面集线器和总线没啥区别,用 CDMA / CD 协议,半双工,在物理层工作;交换机摒弃 CSMA / CD,全双工,工作在链路层利用率分析image.pngimage.pngMAC 层IP 地址随着局域网变化而变化而 MAC 物理地址固化在适配器的 ROM (read-only) 上全球 48 位标准mac 帧是链路层帧的一种实现方式46 - 1500 字节的 MTU,总长度 64-1518B除了数据以外,有目标地址和原地址各占 6 字节2 字节表示上一层协议4 字节 FCS 校验码(比如使用 CRC)没有界定符,采用物理层前导码,尾部则是以太网强制两个帧之间有间隔image.pngmac 帧有以太网 V2 格式和 IEEE 的 802.3 格式,前者常用收发逻辑适配器收到一个帧检查目标 MAC 地址与自己是否匹配。如果不匹配,或出现 FCS 校验错误或者帧长度错误,就丢弃。单播帧 unicast:一对一广播帧 broadcast: 给局域网所有机器返送多播真 multicast 组播介质访问控制 MAC为了避免信道冲突,需要使用 Macimage.pngCDMA 协

教学计划-差分与离散化

2024-09-17
240914julyfunnoteswilliam工作

差分与离散化https://www.luogu.com.cn/record/176971240 火烧赤壁前缀和思想:在起火的左端点标注 +1,右端点标注 -1,则做前缀和以后,大于 0 的线段都是起火的,例如:[ 0 0 +1 +1 0 -1 -1 0] [ 0 0 1 2 2 1 0 ]这里就有长度为 4 的起火段。由于坐标太大,无法直接前缀和,可以离散化,将大坐标映射到小坐标,即排序 + 去重后用 map 标号,在做前缀和即可。n = int(input()) x = [] y = [] for _ in range(n): xx, yy = map(int, input().split()) x.append(xx) y.append(yy) a = sorted(x + y) b = [a[0]] for i in range(1, len(a)): if a[i] != a[i - 1]: b.append(a[i]) di = {} for i in range(len(b)): di[b[i]] = i pre = [0] * len(b) for i in range(n): pre[di[x[i]]] += 1 pre[di[y[i]]] -= 1 ans = 0 for i in range(1, len(b)): pre[i] += pre[i - 1] if pre[i - 1] > 0: ans += b[i] - b[i - 1] print(ans)n = int(input()) x = [] y = [] for _ in range(n): xx, yy = map(int, input().split()) x.append(xx) y.append(yy) a = sorted(___) b = [a[0]] for i in range(1, len(a)): if ___: b.append(a[i]) di = {} for i in range(len(b)): ___ = i pre = [0] * len(b) for i in range(n): ___ += 1 ___ -= 1 ans = 0 for i in range(1, len(b)): pre[i] += pre[i - 1] if pre[i - 1] > 0: ans += ___T2 # P3029 [USACO11NOV] Cow Lineup Shttps://usaco.org/index.php?page=viewproblem2&cpid=89i 表示当前取的左端点,j 表示右端点。用 map 离散化存储不同品种的奶牛数量。当 i 变动时,向右移动 j 保证奶牛品种数必须为全部品种即可。作业题 P1904 天际线https://www.luogu.com.cn/problem/P1904由于坐标范围很小,可以用 h[i] 表示 i 开始的单位线段所占据的最高楼栋。初值均为 $0$,随后查找 h[i] 变化处输出横纵坐标即可。H = [0] * 10005 while True: try: a, h, b = map(int, input().split()) except EOFError: break for i in range(a, b + 1): H[i] = max(H[i], h) h = 0 for i in range(1, int(1e4)): if h != H[i]: h = H[i] print(i, H[i], end=' '

宿舍用品归位

2024-08-28
julyfunnotes生活

左上三大格第一大格药品和个人卫生第二大格当季非外衣衣物第三大格教材书籍草稿纸桌面显示器主机小礼物展示柜常在插线板常在充电线笔筒空地 for 笔记本和草稿纸床上床单床垫被子枕头床旁篮子明天要穿的内裤花露水手机墙上洞洞板右侧剪刀前侧信件左下两大格第一大格过季衣服第二大格大型软物品收纳盒大型硬物品收纳盒小型硬物品收纳盒其他完整盒子右边三柜长衣柜衣架外套衣架裤子长衣柜门外篮没洗的袜子内裤上抽屉内裤 * 5袜子 * 10下抽屉右手两柜抽屉侧柜茶几顶层第二层零食和饮料第三层右边白墙阳台大绿桶准备洗的衣服难题积木 一碰就碎电蚊拍 形状抽象需要封装的小物品(如香水试用)鲜

4.5.权重衰减

2024-08-23
d2ljulyfunnotes技术学习

下面是手动实现,写起来符合直觉,如下:def l2_penalty(w): return torch.sum(w.pow(2)) / 2 def train(lambd): w, b = init_params() net, loss = lambda X: d2l.linreg(X, w, b), d2l.squared_loss num_epochs, lr = 100, 0.003 animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log', xlim=[5, num_epochs], legend=['train', 'test']) for epoch in range(num_epochs): for X, y in train_iter: # 增加了L2范数惩罚项, # 广播机制使l2_penalty(w)成为一个长度为batch_size的向量 l = loss(net(X), y) + lambd * l2_penalty(w) l.sum().backward() d2l.sgd([w, b], lr, batch_size) if (epoch + 1) % 5 == 0: animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss), d2l.evaluate_loss(net, test_iter, loss))) print('w的L2范数是:', torch.norm(w).item())集成实现:def train_concise(wd): net = nn.Sequential(nn.Linear(num_inputs, 1)) for param in net.parameters(): param.data.normal_() loss = nn.MSELoss(reduction='none') num_epochs, lr = 100, 0.003 # 偏置参数没有衰减 trainer = torch.optim.SGD([ {"params":net[0].weight,'weight_decay': wd}, {"params":net[0].bias}], lr=lr) animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log', xlim=[5, num_epochs], legend=['train', 'test']) for epoch in range(num_epochs): for X, y in train_iter: trainer.zero_grad() # loss 上面 loss = nn.MSELoss l = loss(net(X), y) l.mean().backward() trainer.step() if (epoch + 1) % 5 == 0: animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss), d2l.evaluate_loss(net, test_iter, loss))) print('w的L2范数:', net[0].weight.norm().item()

输入必须为 long 类型

2024-08-22
d2ljulyfunnotes技术学习

Embedding 层see: https://blog.csdn.net/zhaohongfei_358/article/details/122809709与独热编码不同,Embedding 可以将词表降维,且可进行学习。也就是做了 word2vecimport torch from torch import nn embedding = nn.Embedding(20, 5) # 输入必须为 long 类型 embedding(torch.LongTensor([0,1,2]))# 初始状态为随机编码,会随着梯度下降逐渐学习 tensor([[ 0.4471, 0.3875, -1.0195, -1.1125, 1.3481], [-1.7230, -0.1964, -0.0420, 0.5782, 0.4514], [-0.0310, -1.9674, -1.1344, -1.6752, 1.0801]], grad_fn=<EmbeddingBackward0>)类参数 padding_idx:指定填充的索引,这个索引的向量会被初始化为 0。关于形状:nl: num_layers ,GRU 的隐藏层个数ns: num_steps,时间步?n: batch_size各层Encoder.Embedding 学会将原始语言(en)词元转换为 vecEncoder.GRU 学会对 en vec 和上一时刻隐状态给出良好的神秘输出(无意义)和下一时刻 en 隐状态Decoder.Embedding 将学会将目标语言(fr)词元转换为 vecDecoder.GRU 学会对 fr vec 和上一时刻隐状态给出良好的神秘输出和下一时刻 fr 隐状态Decoder.Dense 学会将神秘输出转换为词元概率Li Mu:image.png训练时 Decoder 输入为正确答案:image.png推理时 Decoder 输入为上一时刻输出:image.png外层训练入口[train] 训练时,每对数据仅预测一步,获取损失optimizer = torch.optim.Adam(net.parameters(), lr=lr) loss = MaskedSoftmaxCELoss() for epoch in range(num_epochs): timer = d2l.Timer() for batch in data_iter: optimizer.zero_grad() X, X_valid_len, Y, Y_valid_len = [x.to(device) for x in batch] # X 和 Y 的形状:(n, ns) bos = torch.tensor([tgt_vocab['<bos>']] * Y.shape[0], device=device).reshape(-1, 1) # bos 的形状:(n, 1) dec_input = torch.cat([bos, Y[:, :-1]], 1) # 强制教学 # dec_input 的形状:(n, ns),第一个改为 <bos> # 强制教学把答案当做输入 # 使 embedding 学会正确编码法语, s.t. GPU 可以正确给出下一时刻的 output + state # s.t. 使得 Linear 可以根据 output 正确给出词元概率 && 这个 state 可以帮助下一时刻正确给出 output 和 state # enc_X=X, dec_X=dec_input, *args Y_hat, _ = net(X, dec_input, X_valid_len) l = loss(Y_hat, Y, Y_valid_len) l.sum().backward() # 损失函数的标量进行“反向传播” d2l.grad_clipping(net, 1) num_tokens = Y_valid_len.sum() optimizer.step()[train.net()] 其中 enc_X 输入为原始语言序列,dec_X 输入为目标语言序列答案。def forward(self, enc_X, dec_X, *args): enc_outputs = self.encoder(enc_X, *args) # enc_outputs: (output(ns, n, nh), state(nl, n, nh)) dec_state = self.decoder.init_state(enc_outputs, *args) # dec_state: 即 state(nl, n, nh) return self.decoder(dec_X, dec_state)损失函数就是预测出来概率与答案的交叉熵损失. 但是 <pad> 需要被排除在外.[train.loss] loss 传入解码器的预测概率(长度为词表大小)和答案序列计算损失,会对 valid_len 以外的 <pad> 进行 mask,使之不产生损失。外层预测入口首先将整个原始句子传入编码器,得到浓缩的所有信息 $bold(c)$传给解码器一步步预测。$bold(c)$ 作为第一步预测的隐状态,接下来每步隐状态会不断更新# def predict_seq2seq(net, src_sentence, src_vocab, tgt_vocab, num_steps, # device, save_attention_weights=False): """ 此处设置解码器网路内部 num_steps = 1,解码器输入的时间长度也为 1,每次只预测一个单词. """ src_tokens = src_vocab[src_sentence.lower().split(' ')] + [ src_vocab['<eos>']] enc_valid_len = torch.tensor([len(src_tokens)], device=device) src_tokens = d2l.truncate_pad(src_tokens, num_steps, src_vocab['<pad>']) # 添加批量轴 # 在 shape[0] 处加一维(长度为 1) # enc_X: shape = (1, len(src_tokens)) enc_X = torch.unsqueeze( torch.tensor(src_tokens, dtype=torch.long, device=device), dim=0) # 现将整个 enc_X 传入编码器 # enc_outputs: 包含 output, state enc_outputs = net.encoder(enc_X, enc_valid_len) # 此处 [0] output: (ns, n, nh) # [1] state: (nl, n, nh) dec_state = net.decoder.init_state(enc_outputs, enc_valid_len) # dec_state shape: (nl, n, nh) 不包含每个时间步 dec_X = torch.unsqueeze(torch.tensor( [tgt_vocab['<bos>']], dtype=torch.long, device=device), dim=0) # dec_X: shape (n, ns) ex (1, 1) output_seq, attention_weight_seq = [], [] for _ in range(num_steps): Y, dec_state = net.decoder(dec_X, dec_state) # Y shape = (1, 1, vocab_size) (n, ns, nvocab) # 我们使用具有预测最高可能性的词元,作为解码器在下一时间步的输入 dec_X = Y.argmax(dim=2) pred = dec_X.squeeze(dim=0).type(torch.int32).item() # 保存注意力权重(稍后讨论) if save_attention_weights: attention_weight_seq.append(net.decoder.attention_weights) # 一旦序列结束词元被预测,输出序列的生成就完成了 if pred == tgt_vocab['<eos>']: break output_seq.append(pred) return ' '.join(tgt_vocab.to_tokens(output_seq)), attention_weight_seq类class Seq2SeqEncoder(d2l.Encoder): def __init__(self, vocab_size, embed_size, num_hiddens, num_layers, dropout=0, **kwargs): super(Seq2SeqEncoder, self).__init__(**kwargs) # 嵌入层 self.embedding = nn.Embedding(vocab_size, embed_size) self.rnn = rnn.GRU(num_hiddens, num_layers, dropout=dropout) def forward(self, X, *args): # [def] n 是批量 # 输入 X 形状: (n, ns) X = self.embedding(X) # 输出'X'的形状:(batch_size,num_steps,embed_size) # 在循环神经网络模型中,第一个轴对应于时间步 X = X.swapaxes(0, 1) state = self.rnn.begin_state(batch_size=X.shape[1], ctx=X.ctx) output, state = self.rnn(X, state) # output的形状:(num_steps,batch_size,num_hiddens) 被舍弃 # state的形状:(num_layers,batch_size,num_hiddens) 编码全部输入信息 return output, state class Seq2SeqDecoder(d2l.Decoder): def __init__(self, vocab_size, embed_size, num_hiddens, num_layers, dropout=0, **kwargs): super(Seq2SeqDecoder, self).__init__(**kwargs) self.embedding = nn.Embedding(vocab_size, embed_size) self.rnn = nn.GRU(embed_size + num_hiddens, num_hiddens, num_layers, dropout=dropout) self.dense = nn.Linear(num_hiddens, vocab_size) def init_state(self, enc_outputs, *args): return enc_outputs[1] # 也就是 state def forward(self, X, state): # X: shape (n, ns) # state: shape (nl, n, nh),就是编码器对所有输入信息的编码. X = self.embedding(X).permute(1, 0, 2) # X: (ns, n, n_embed) ex (7, 4, 8) # 此处 state[-1] 是深度循环神经网络最后一层,即最靠近 output 的一层. # 将这一层复制 n_timestep 次. [这合理吗?] context = state[-1].repeat(X.shape[0], 1, 1) # context: (ns, n, nh) ex (7, 4, 16) X_and_context = torch.cat((X, context), 2) # X_and_context: (ns, n, n_embed + nh) ex (7, 4, 24) # 也即,每一时间步每一批量的输入为 n_embed + nh,即 embedding + 刚刚 state 最后一层. # [qm] 这里 rnn() 怎么又把 state 输入进去了,这不纯信息冗余吗 # 注意 rnn 是一次性循环所有时间步. output, state = self.rnn(X_and_context, state) # 此时 output 形状为 (ns, n, nh) 即每时间步每批量输出一个神秘的 nh output = self.dense(output).permute(1, 0, 2) # 最终 output的形状:(n, ns, n_vocab) 这里 ns 中的有效长度和输入 X 不同 # state的形状: (num_layers,batch_size,num_hiddens) return output, state class EncoderDecoder(nn.Module): def __init__(self, encoder, decoder, **kwargs): super(EncoderDecoder, self).__init__(**kwargs) self.encoder = encoder self.decoder = decoder def forward(self, enc_X, dec_X, *args): enc_outputs = self.encoder(enc_X, *args) dec_state = self.decoder.init_state(enc_outputs, *args) return self.decoder(dec_X, dec_state)手绘流程图公式解码时隐状态: $$s_(t^prime) = g(y_(t^prime - 1), bold(c), s_(t^prime - 1))$$其中 $c$ 是编码器对整个输入序列 $x_1, ... x_T$ 的编码.这里 $t^prime$ 只是为了和输入序列时间区分.output, state = self.rnn(X_and_context, state) output = self.dense(output).permute(1, 0, 2)BLEU用于评估预测序列的好坏,值域 $0 tilde 1$。给出预测序列中的 $n$ 元语法有多少出现在标签序列(答案)中。越长的语法权重越大。若预测的太短,会有惩罚。go . => va !, bleu 1.000 i lost . => j'ai perdu ., bleu 1.000 he's calm . => il est bon ?, bleu 0.537 i'm home . => je suis chez moi debout ., bleu 0.80

9.6.encoderdecoder

2024-08-22
d2ljulyfunnotes技术学习

from torch import nn class Encoder(nn.Module): """编码器-解码器架构的基本编码器接口""" def __init__(self, **kwargs): super(Encoder, self).__init__(**kwargs) def forward(self, X, *args): raise NotImplementedError class Decoder(nn.Module): """编码器-解码器架构的基本解码器接口""" def __init__(self, **kwargs): super(Decoder, self).__init__(**kwargs) def init_state(self, enc_outputs, *args): raise NotImplementedError def forward(self, X, state): raise NotImplementedError class EncoderDecoder(nn.Module): """编码器-解码器架构的基类""" def __init__(self, encoder, decoder, **kwargs): super(EncoderDecoder, self).__init__(**kwargs) self.encoder = encoder self.decoder = decoder def forward(self, enc_X, dec_X, *args): enc_outputs = self.encoder(enc_X, *args) dec_state = self.decoder.init_state(enc_outputs, *args) return self.decoder(dec_X, dec_state)编码器有输入 env_X,同时解码器还会将编码器输出转化为 state,并和自己的额外输入 dec_X 一起输入到解码器中。这里并没有说输入会是独热编码

X: (2, 8) (n, ns)

2024-08-21
d2ljulyfunnotes技术学习

为了防止词表太大,将低频词元替换为 <unk> 最后生成的 iter 接口为: ```python train_iter, src_vocab, tgt_vocab = load_data_nmt(batch_size=2, num_steps=8) for X, X_valid_len, Y, Y_valid_len in train_iter: print('X:', X.type(torch.int32)) print('X的有效长度:', X_valid_len) print('Y:', Y.type(torch.int32)) print('Y的有效长度:', Y_valid_len) break # X: (2, 8) (n, ns) # Y: 也是 (n, ns)# 小批量中训练数据的长度统一为 num_steps(上面有),不足的用 1 即 <pad> 填充 X: tensor([[62, 25, 4, 3, 1, 1, 1, 1], [99, 10, 4, 3, 1, 1, 1, 1]], dtype=torch.int32) # 可能代表的数据形如 [["I", "try", ".", <eos>, <pad>, <pad>, <pad>, <pad>], ["This", "is", ".", <eos>, <pad>, <pad>, <pad>, <pad>]] X的有效长度: tensor([4, 4]) Y: tensor([[186, 5, 3, 1, 1, 1, 1, 1], [ 0, 8, 4, 3, 1, 1, 1, 1]], dtype=torch.int32) Y的有效长度: tensor([3, 4]) # <bos> 在 train_seq2seq() 中再加入注意这并非要求网络输入层维数为 num_steps,比如 rnn 中也有 num_steps 但输入层维数就是词表大小(即一个单词的独热编码

零极点滤波器设计大纲

2024-08-20
julyfunnotes信号处理技术学习

see: https://github.com/julyfun/dsp-lab2/blob/main/lab1-to-3.typ滤除单一频率梳状滤波器,设计零点靠近圆而极点远离。推导见 typ 中的 $10.a$$$ H(z) &= (z ^ 2 - 2 cos(w_c) z + 1) / (z ^ 2 - 2 R cos(w_c) z + R ^ 2) &tilde.eq (z ^ 2 - 1.46 z + 1) / (z ^ 2 - 1.43 z + 0.968) $$$$y[n] - 1.43 y[n - 1] + 0.968 y[n - 2] = x[n] - 1.46 x[n - 1] + x[n - 2]$$保留 / 增强单一频率齿状滤波器。设计极点靠近圆而零点远离。此处有更精巧的设计,见 $10.c$$$ H(z) &tilde.eq 1 / 9.65 times (z ^ 2 - 1.70 z + 0.722) / (z ^ 2 - 1.97 z + 0.969) &tilde.eq (0.104 z ^ 2 - 0.130 z + 0.0748) / (z ^ 2 - 1.97 z + 0.969) $$$$ y[n] - 1.97 y[n - 1] + 0.969 y[n - 2] = 0.104 x[n] - 0.130 x[n - 1] + 0.0748 x[n - 2] $

2-多臂老虎机

2024-08-19
hrljulyfunnotes技术学习

符号$cal(A)$: 动作集合 $cal(R)$: 奖励概率分布,动作 $a$ 对应一个奖励分布 $cal(R)(r | a)$对动作 $a$,定义其期望奖励为 $Q(a)$最优期望奖励 $Q^* = max_(a in cal(A)) Q(a)$懊悔 $R(a) = Q^* - Q(a)$$limits(Q)^("hat")$: 对 $a$ 的期望奖励估值名称MAB: 多臂老虎机UCB: 上置信界法问题表述多臂老虎机是无状态的强化学习,即与环境交互不会改变环境。在下述算法里,每个老虎机的奖励服从伯努利分布,即以 $p_i$ 的概率获得 $1$$epsilon$ 贪心算法$$ a_t = cases( arg max_(a in cal(A)) Q^"hat" (a) & "采样概率" 1 - epsilon, "从" cal(A) "随机选择" & "采样概率" epsilon ) $$以 $epsilon$ 的概率随机探索一个。结果由于随机的部分,懊悔是线性增长的。随时间衰减的 $epsilon$ 贪心算法$epsilon_t = 1 / t$测试时 $K = 10$(老虎机个数),结果累计懊悔是 $ln$ 形式增长的。image.png上置信界算法在 https://hrl.boyuai.com/chapter/1/%E5%A4%9A%E8%87%82%E8%80%81%E8%99%8E%E6%9C%BA/#25-%E4%B8%8A%E7%BD%AE%E4%BF%A1%E7%95%8C%E7%AE%97%E6%B3%95 中已经最小化讲清楚了。用到了霍夫丁不等式。每一时刻设一个概率 $p = 1 / t$。对于每个动作 $a$ 算出一个 $U_t^"hat" (a)$ s.t. $p = e^(-2N_t(a)U_t(a)^2) (<=> U^"hat"_t (a) = sqrt((-log p) / (2 N_t (a))) )$,根据霍夫丁不等式必有: $Q_t (a) < Q^"hat"_t (a) + u$ 至少以 $1 - p$ 概率成立,称不等式右边为期望奖励上界(其实是大概率上界)。当 $t$ 增大时该可能性极大。实操时, $U^"hat"t (a) = sqrt((-log p) / (2 (N_t (a) + 1)))$,每次选择 $a = arg max(a in cal(A)) Q^"hat" (a) + c dot U^"hat" (a)$ 其中 $c$ 为控制不确定性比重的系数。ipynb 中 $c = 1$累计懊悔也是 $ln$ 形式:image.png汤普森采样算法若拉杆 $m_1$ 次奖励为 $1$,$m_2$ 次奖励为 $0$ ,则大胆假设拉杆的奖励概率(注意奖励概率为 $p$,每次要么得 $1$ 要么得 $0$)的概率分布为 $Beta(m_1 + 1, m_2 + 1)$那么每步怎么做决策呢?我们已经大胆假设了所有拉杆的奖励的期望的分布,那么就直接对所有拉杆进行一次 $Beta$ 分布上的采样。拉动采样最大的那

iter 每次迭代 X([n, d] or [n, c, h, w]), y([n])

2024-08-19
d2ljulyfunnotes技术学习

import torch from torch import nn from d2l import torch as d2l net = nn.Sequential(nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), nn.Linear(256, 10)) def init_weights(m): if type(m) == nn.Linear: nn.init.normal_(m.weight, std=0.01) net.apply(init_weights) batch_size, lr, num_epochs = 256, 0.1, 10 loss = nn.CrossEntropyLoss() trainer = torch.optim.SGD(net.parameters(), lr=lr) train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) # iter 每次迭代 X([n, d] or [n, c, h, w]), y([n]) # 例如: (torch.Size([256, 1, 28, 28]), torch.Size([256])) class Accumulator: def __init__(self, n): self.data = [0.0] * n def add(self, *args): self.data = [a + float(b) for a, b in zip(self.data, args)] def reset(self): self.data = [0.0] * len(self.data) def __getitem__(self, idx): return self.data[idx] def evaluate_accuracy(net, data_iter): if isinstance(net, torch.nn.Module): net.eval() # 将模型设置为评估模式 metric = Accumulator(2) # 正确预测数、预测总数 with torch.no_grad(): for X, y in data_iter: metric.add(accuracy(net(X), y), y.numel()) return metric[0] / metric[1] def train_epoch_ch3(net, train_iter, loss, updater): # 将模型设置为训练模式 if isinstance(net, torch.nn.Module): net.train() # 训练损失总和、训练准确度总和、样本数 metric = Accumulator(3) for X, y in train_iter: # 计算梯度并更新参数 y_hat = net(X) l = loss(y_hat, y) if isinstance(updater, torch.optim.Optimizer): updater.zero_grad() l.mean().backward() updater.step() else: l.sum().backward() updater(X.shape[0]) metric.add(float(l.sum()), accuracy(y_hat, y), y.numel()) # 训练损失和训练精度 return metric[0] / metric[2], metric[1] / metric[2] def train_ch3(net, train_iter, test_iter, loss, num_epochs, updater): #@save legend=['train loss', 'train acc', 'test acc']) for epoch in range(num_epochs): train_metrics = train_epoch_ch3(net, train_iter, loss, updater) test_acc = evaluate_accuracy(net, test_iter) train_loss, train_acc = train_metrics assert train_loss < 0.5, train_loss assert train_acc <= 1 and train_acc > 0.7, train_acc assert test_acc <= 1 and test_acc > 0.7, test_acc train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer

9.1.gru

2024-08-19
d2ljulyfunnotes技术学习

$$R_t^(in n times h) = sigma (X_t W_(x r) + H_(t - 1) W_(h r) + b_r)$$$$Z_t^(in n times h) = sigma (X_t W_(x z) + H_(t - 1) W_(h z) + b_z)$$以上都独占三组参数。候选隐状态,由重置门 $R_t$ 决定是否保留旧状态,若 $R_t$ 接近 $0$ 不保留,则倾向于捕获短期依赖关系。这里又占有三组参数:$$limits(H_t)^(tilde) = tanh(X_t W_(x h) + (R_t dot.circle H_(t - 1)) W_(h h) + b_h)$$更新门将决定是否忽略当前隐状态,最终生成真正的隐状态。若 $Z_t$ 接近 $1$ 则倾向于保留旧状态,捕获长期依赖关系:$$H_t = Z_t dot.circle H_(t - 1) + (1 - Z_t) dot.circle limits(H_t)^(tilde)$$从头实现def get_params(vocab_size, num_hiddens, device): num_inputs = num_outputs = vocab_size def normal(shape): return torch.randn(size=shape, device=device)*0.01 def three(): return (normal((num_inputs, num_hiddens)), normal((num_hiddens, num_hiddens)), torch.zeros(num_hiddens, device=device)) W_xz, W_hz, b_z = three() # 更新门参数 W_xr, W_hr, b_r = three() # 重置门参数 W_xh, W_hh, b_h = three() # 候选隐状态参数 # 输出层参数 W_hq = normal((num_hiddens, num_outputs)) b_q = torch.zeros(num_outputs, device=device) # 附加梯度 params = [W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q] for param in params: param.requires_grad_(True) return params def init_gru_state(batch_size, num_hiddens, device): return (torch.zeros((batch_size, num_hiddens), device=device), ) def gru(inputs, state, params): W_xz, W_hz, b_z, W_xr, W_hr, b_r, W_xh, W_hh, b_h, W_hq, b_q = params H, = state outputs = [] for X in inputs: Z = torch.sigmoid((X @ W_xz) + (H @ W_hz) + b_z) R = torch.sigmoid((X @ W_xr) + (H @ W_hr) + b_r) H_tilda = torch.tanh((X @ W_xh) + ((R * H) @ W_hh) + b_h) H = Z * H + (1 - Z) * H_tilda Y = H @ W_hq + b_q outputs.append(Y) # [qm] 这里批量何在? return torch.cat(outputs, dim=0), (H,)高级 api 接口num_inputs = vocab_size gru_layer = nn.GRU(num_inputs, num_hiddens) model = d2l.RNNModel(gru_layer, len(vocab)) model = model.to(device) d2l.train_ch8(model, train_iter, vocab, lr, num_epochs, device)问题训练好后的网络如何决定是否保留隐藏状态?是因为 R 和 Z 中的权重分布,导致输入 ahh 的无效单词就会导致 $R_t$ 重置?根据上面的 R 公式,似乎就是依赖当前输入和隐状态来决定生成重置权重

jfmfoi

2024-08-17
24.08.17jfmfoijulyfunnotes工作

快速幂: https://www.luogu.com.cn/problem/P1226分治最大字段和:#include<cstdio> int n , arr[200200]; //arr存储该序列 const int minn = -19260817; // 定义最小值 inline int Max( int a , int b) { return a > b ? a : b ;} //自定义 Max 函数(好像比stl的快一点) int rec( int l , int r ) { //分治函数 if ( l == r ) { // l=r时,直接返回该位置的值 return arr[l]; } int mid = ( l + r ) >> 1; int sum = 0 , ret1 = minn , ret2 = minn; //ret1为[l..mid]区间内包含mid的最大子段和,ret2为[mid+1..r]区间内包含(mid+1)的最大子段和 for( int i = mid ; i >= l ; i-- ) { sum += arr[i]; ret1 = Max( ret1 , sum ); } //求出[i..mid]区间最大值 sum = 0; for( int i = mid+1 ; i <= r ; i++ ) { sum += arr[i]; ret2 = Max( ret2 , sum ); } //求出[mid+1..r]区间最大值 return Max( Max( rec( l , mid ) , rec( mid + 1 , r ) ) , ret1 + ret2 ); //返回可能一 可能二 可能三 中的最大值 } int main() { // 以下主函数 scanf("%d", &n ); for( int i = 1 ; i <= n ; i++ ) { scanf("%d" , &arr[i] ); } printf("%d" , rec(1 , n) ); return 0; }作业 - 简单st 表: https://www.luogu.com.cn/problem/P3865(数学)集合求和: https://www.luogu.com.cn/problem/P2415(st 表) 忠诚: https://www.luogu.com.cn/problem/P1816附加作业(可选)麦森数: https://www.luogu.com.cn/problem/P1045逆序对: https://www.luogu.com.cn/problem/P1908喷泉: https://www.luogu.com.cn/problem/solution/P716

RNN() 内部含有 W, b 参数之类的

2024-08-16
d2ljulyfunnotes技术学习

nn.RNN接口很简单。注意隐状态 state 是在 RNN 对象之外另开对象进行存储的。batch_size, num_steps = 32, 35 train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps) num_hiddens = 256 # RNN() 内部含有 W, b 参数之类的 rnn_layer = nn.RNN(len(vocab), num_hiddens) # state 形状 [隐藏层数,批量大小,隐藏单元数] state = torch.zeros((1, batch_size, num_hiddens)) # X.shape = [时间步,批量,词典大小(独热)] X = torch.rand(size=(num_steps, batch_size, len(vocab))) # Y.shape = [时间步,批量,隐藏单元数], state 形状不变 Y, state = self.rnn(X, state)封装class RNNModel(nn.Module): """循环神经网络模型""" def __init__(self, rnn_layer, vocab_size, **kwargs): super(RNNModel, self).__init__(**kwargs) self.rnn = rnn_layer self.vocab_size = vocab_size self.num_hiddens = self.rnn.hidden_size # 如果RNN是双向的(之后将介绍),num_directions应该是2,否则应该是1 if not self.rnn.bidirectional: self.num_directions = 1 self.linear = nn.Linear(self.num_hiddens, self.vocab_size) else: self.num_directions = 2 self.linear = nn.Linear(self.num_hiddens * 2, self.vocab_size) def forward(self, inputs, state): X = F.one_hot(inputs.T.long(), self.vocab_size) X = X.to(torch.float32) Y, state = self.rnn(X, state) # 全连接层首先将Y的形状改为(时间步数*批量大小,隐藏单元数) # 它的输出形状是(时间步数*批量大小,词表大小)。 output = self.linear(Y.reshape((-1, Y.shape[-1]))) return output, state def begin_state(self, device, batch_size=1): if not isinstance(self.rnn, nn.LSTM): # nn.GRU以张量作为隐状态 return torch.zeros((self.num_directions * self.rnn.num_layers, batch_size, self.num_hiddens), device=device) else: # nn.LSTM以元组作为隐状态 return (torch.zeros(( self.num_directions * self.rnn.num_layers, batch_size, self.num_hiddens), device=device), torch.zeros(( self.num_directions * self.rnn.num_layers, batch_size, self.num_hiddens), device=device))32:0

获取初始参数

2024-08-16
d2ljulyfunnotes技术学习

梯度裁剪类似于球形投影,使梯度的 L2 范数不超过阈值。训练注意训练时候每个批量的隐状态是分别存储的,不会相互影响。多久一次 backward?要将一个批量内所有样本的所有时间步(在程序开始时设定,比如样本 size = 32,单次输入时间步 num_steps 为 35)forward 以后(每次 forward 仅进行一个时间步的预测),才进行 backward。因此权重参数矩阵会累乘,容易导致梯度爆炸,故进行梯度裁剪。d2l 代码中,梯度裁剪在 backward 后,updater 之前执行。注意对每个批量而言,每次输入仅有一个 token,并非多个时间步 token 同时输入。手绘2:15:13手动代码import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l batch_size, num_steps = 32, 35 train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps) # 获取初始参数 def get_params(vocab_size, num_hiddens, device): num_inputs = num_outputs = vocab_size def normal(shape): return torch.randn(size=shape, device=device) * 0.01 # 隐藏层参数 W_xh = normal((num_inputs, num_hiddens)) W_hh = normal((num_hiddens, num_hiddens)) b_h = torch.zeros(num_hiddens, device=device) # 输出层参数 W_hq = normal((num_hiddens, num_outputs)) b_q = torch.zeros(num_outputs, device=device) # 附加梯度 params = [W_xh, W_hh, b_h, W_hq, b_q] for param in params: param.requires_grad_(True) return params # 前向传播 forward # 一次 forward 就将各个批量的所有时间步都生成完了 def rnn(inputs, state, params): # inputs的形状:(时间步数量,批量大小,词表大小) W_xh, W_hh, b_h, W_hq, b_q = params H, = state outputs = [] # 循环每个时间步 for X in inputs: # X的形状:(批量大小,词表大小) # 注意这里隐状态包含所有批量各自的隐状态 # H 形状: (批量大小,隐藏单元个数) H = torch.tanh(torch.mm(X, W_xh) + torch.mm(H, W_hh) + b_h) # 本步输出不会影响下一步输出,只有隐状态才会 # Y 形状: (批量大小,词表大小),因为前面已经指定 num_outputs = vocab_size Y = torch.mm(H, W_hq) + b_q outputs.append(Y) # 返回一个元组,即所有时间步的输出 y 和最后一个隐状态 return torch.cat(outputs, dim=0), (H,) # torch.cat 输出为 (ns * n, n_vocab) def init_rnn_state(batch_size, num_hiddens, device): return (torch.zeros((batch_size, num_hiddens), device=device), ) # 模型封装 class RNNModelScratch: def __init__(self, vocab_size, num_hiddens, device, get_params, init_state, forward_fn): self.vocab_size, self.num_hiddens = vocab_size, num_hiddens self.params = get_params(vocab_size, num_hiddens, device) self.init_state, self.forward_fn = init_state, forward_fn def __call__(self, X, state): X = F.one_hot(X.T, self.vocab_size).type(torch.float32) return self.forward_fn(X, state, self.params) def begin_state(self, batch_size, device): return self.init_state(batch_size, self.num_hiddens, device) num_hiddens = 512 net = RNNModelScratch(len(vocab), num_hiddens, d2l.try_gpu(), get_params, init_rnn_state, rnn) state = net.begin_state(X.shape[0], d2l.try_gpu()) # 预测 def predict_ch8(prefix, num_preds, net, vocab, device): """在prefix后面生成新字符""" state = net.begin_state(batch_size=1, device=device) outputs = [vocab[prefix[0]]] get_input = lambda: torch.tensor([outputs[-1]], device=device).reshape((1, 1)) for y in prefix[1:]: # 预热期 _, state = net(get_input(), state) outputs.append(vocab[y]) for _ in range(num_preds): # 预测num_preds步 y, state = net(get_input(), state) outputs.append(int(y.argmax(dim=1).reshape(1))) return ''.join([vocab.idx_to_token[i] for i in outputs]) # 梯度裁剪 def grad_clipping(net, theta): #@save """裁剪梯度""" if isinstance(net, nn.Module): params = [p for p in net.parameters() if p.requires_grad] else: params = net.params norm = torch.sqrt(sum(torch.sum((p.grad ** 2)) for p in params)) if norm > theta: for param in params: param.grad[:] *= theta / norm # 训练一个 epoch def train_epoch_ch8(net, train_iter, loss, updater, device, use_random_iter): """训练网络一个迭代周期(定义见第8章)""" state, timer = None, d2l.Timer() metric = d2l.Accumulator(2) # 训练损失之和,词元数量 for X, Y in train_iter: if state is None or use_random_iter: # 在第一次迭代或使用随机抽样时初始化state state = net.begin_state(batch_size=X.shape[0], device=device) else: if isinstance(net, nn.Module) and not isinstance(state, tuple): # state对于nn.GRU是个张量 state.detach_() else: # state对于nn.LSTM或对于我们从零开始实现的模型是个张量 for s in state: s.detach_() y = Y.T.reshape(-1) # y.shape: (ns * n) X, y = X.to(device), y.to(device) y_hat, state = net(X, state) l = loss(y_hat, y.long()).mean() if isinstance(updater, torch.optim.Optimizer): updater.zero_grad() l.backward() grad_clipping(net, 1) updater.step() else: l.backward() grad_clipping(net, 1) # 因为已经调用了mean函数 updater(batch_size=1) metric.add(l * y.numel(), y.numel()) return math.exp(metric[0] / metric[1]), metric[1] / timer.stop() # 训练多个 epoch def train_ch8(net, train_iter, vocab, lr, num_epochs, device, use_random_iter=False): """训练模型(定义见第8章)""" loss = nn.CrossEntropyLoss() animator = d2l.Animator(xlabel='epoch', ylabel='perplexity', legend=['train'], xlim=[10, num_epochs]) # 初始化 if isinstance(net, nn.Module): updater = torch.optim.SGD(net.parameters(), lr) else: updater = lambda batch_size: d2l.sgd(net.params, lr, batch_size) predict = lambda prefix: predict_ch8(prefix, 50, net, vocab, device) # 训练和预测 for epoch in range(num_epochs): ppl, speed = train_epoch_ch8( net, train_iter, loss, updater, device, use_random_iter) if (epoch + 1) % 10 == 0: print(predict('time traveller')) animator.add(epoch + 1, [ppl]) print(f'困惑度 {ppl:.1f}, {speed:.1f} 词元/秒 {str(device)}') print(predict('time traveller')) print(predict('traveller')) num_epochs, lr = 500, 1 train_ch8(net, train_iter, vocab, lr, num_epochs, d2l.try_gpu()

8.4.RNN

2024-08-16
d2ljulyfunnotes技术学习

RNN 基础模型$$bold(H)^(in n times h)t = phi(bold(X^(in n times d "输入维度")) bold(W(x h)^(in d times h)) + bold(H)(t - 1)^(in h times h) bold(W)(h h)^(in h times h) b_h)$$$$O_t = H_t W_(h q "输出维度") + b_q$$这里 $W_(x h), W_(h h)$ 极其类似于单隐藏层感知机中的隐藏层,只是前一刻的隐藏层输出会成为下一刻隐藏层的输入的一部分。而 $H_t$ 隐状态则存储在网络之外。Perplexity 困惑度$$exp(- 1 / n sum_(t = 1)^(n) log P(x_t | x_(t - 1), ..., x_1))$$可以直接利用神经网络输出的概率,评估它有多自信。当每个输出的概率均为 $1$ 时,困惑度为 $1$,当概率为 $0$ 时困惑度正无穷,当概率为均匀分布时困惑度为唯一词元数(也是未压缩情况下存储序列最好的编码方式)。看到一个语言模型报告其 perplexity 为 $109$ 时,直观理解为它每次输出认为有 $109$ 个词作为下一个词的合理选择。ref: http://sentiment-mining.blogspot.com/2016/11/perplexity.htm

DH 描述

2024-08-16
julyfunnotes技术学习机械臂

你先看懂这里面 Z 轴,O,X 轴和 Y 轴如何确定 https://blog.csdn.net/subtitle_/article/details/130982929?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-130982929-blog-108599703.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.1&utm_relevant_index=3再看这里面的图示 https://gitcode.csdn.net/662b5441c46af92642779966.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MTQxMTEzNSwiZXhwIjoxNzIwNDIyMTA3LCJpYXQiOjE3MTk4MTczMDcsInVzZXJuYW1lIjoid2VpeGluXzYyNzczMTE2In0.w3noMfKhmKUEEJIHgdKL9j2Tx-x9h__gf_ZRV4LJUKM每组四个参数 $theta, d, alpha, a$,其中 $theta$ 是逆解中待确定的值,其他为固定值 确定了 6 组参数以后可以确定 ori 和 po

x shape: (n, ns)

2024-08-15
d2ljulyfunnotes技术学习

拉普拉斯平滑在统计单词 / 连续单词出现次数后,计算出现概率 $P$ 时,添加一个超参数小常量。效果:若常量趋于无穷大,则概率为 $1 / "单词总数"$(对于连续单词 AB,则是趋于 $1 / P("A")$)齐普夫定律分布满足对数坐标系上的下降直线。一元语法,n 元语法均遵守这个分布。构造的数据集形如for X, Y in seq_data_iter_sequential(my_seq, batch_size=2, num_steps=5): print('X: ', X, '\nY:', Y)# x shape: (n, ns) # y shape: (n, ns) X: tensor([[ 2, 3, 4, 5, 6], [18, 19, 20, 21, 22]]) Y: tensor([[ 3, 4, 5, 6, 7], [19, 20, 21, 22, 23]]) X: tensor([[ 7, 8, 9, 10, 11], [23, 24, 25, 26, 27]]) Y: tensor([[ 8, 9, 10, 11, 12], [24, 25, 26, 27, 28]]) X: tensor([[12, 13, 14, 15, 16], [28, 29, 30, 31, 32]]) Y: tensor([[13, 14, 15, 16, 17], [29, 30, 31, 32, 33]])44:2

7.7.densenet

2024-08-15
d2ljulyfunnotes技术学习

概述densenet 与 resnet 相比,拼接了连续多个 ConvBlock 构成一个 DenseBlock,并且使用的也不是相加而是 torch.cat。例如,对于一个 DenseBlock,若输入通道为 64,第一个卷积层输出通道数为 32,则会先拼接原始 64 通道和卷积输出的 32 通道,构成 96 通道输入到第二个卷积层,再输出通道数 32,则拼接为 96 + 32 = 128 通道。此处的标准 conv_block 变成了 BN + ReLU + Conv2d3x3为了保持通道数不爆炸,引入过渡块,直接 BN + Conv2d1x1 + AvgPool2x2 把通道数压下来(压一半)。最前面和最后面与 Googlenet 一致。训练时间 2m 36.6s (高宽已经 resize 到 96)loss 0.140, train acc 0.949, test acc 0.903练习为什么我们在过渡层使用平均汇聚层而不是最大汇聚层?不知道DenseNet的优点之一是其模型参数比ResNet小。为什么呢?DenseNet一个诟病的问题是内存或显存消耗过多。真的是这样吗?可以把输入形状换成$224 \times 224$,来看看实际的显存消耗。有另一种方法来减少显存消耗吗?需要改变框架么?实现DenseNet论文 :cite:Huang.Liu.Van-Der-Maaten.ea.2017表1所示的不同DenseNet版本。应用DenseNet的思想设计一个基于多层感知机的模型。将其应用于 :numref:sec_kaggle_house中的房价预测任务

[解释] 输入通道 3,输出通道 96,输出大小 54 * 54,注意这里 kernel 没有刚好填到最右端,下取整为 54. 卷积核有 96 个(每个输出通道拥有一个卷积核,每个卷积核的形状是 3 * 11 * 11).

2024-08-15
d2ljulyfunnotes技术学习

四维度数据顺序为 n, c, h, w. ref: https://github.com/julyfun/numpytorch/blob/main/numpytorch/nn/modules/conv.pyFlatten 不会展开 batch 维度,(n, 512, 1, 1) 经过 Flatten 以后的形状为 (n, 512)卷积层中,输入通道到输出通道是全连接的。卷积核的形状是 out_channel * in_channel * k_h * k_w,这也是一层的参数量,每个输入-输出通道 pair 拥有仅一个 $k_h times k_w$ 的卷积核(或者说每个输出通道拥有一个 in_channel * k_h * k_w 的卷积核).torch.nn.Conv2d# [解释] 输入通道 3,输出通道 96,输出大小 54 * 54,注意这里 kernel 没有刚好填到最右端,下取整为 54. 卷积核有 96 个(每个输出通道拥有一个卷积核,每个卷积核的形状是 3 * 11 * 11). nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=1),ClassesConvTranspose2dself.upconv2 = nn.ConvTranspose2d(128, 64, kernel_size=2, stride=2)他会在卷积逆操作的同时插入 0,放大分辨率。输入张量: 1 2 3 4 插入零后的张量: 1 0 2 0 0 0 0 0 3 0 4 0 0 0 0 0 卷积核: 1 0 0 1 转置卷积操作的输出: 1 0 2 0 0 0 0 0 3 0 4 0 0 0 0

7.6.resnet

2024-08-15
d2ljulyfunnotes技术学习

回忆提纲resnet 块一条路径为 Conv + BN + ReLU + Conv + BN,保持形状不变,将输入直接加到输出,再跟一个 ReLU.为什么有用? 当网络深度加深时,可能出现网络退化(不是梯度爆炸)。事实上,可能中间的某一层已经是最优网络。resnet 非常容易学习到恒等映射,避免了网络退化。ref: https://blog.csdn.net/fengdu78/article/details/128451148手绘:截图:通道数不断增加(在每一 block 的第一个卷积层增加):conv5 output shape: (1, 64, 112, 112) batchnorm4 output shape: (1, 64, 112, 112) relu0 output shape: (1, 64, 112, 112) pool0 output shape: (1, 64, 56, 56) sequential1 output shape: (1, 64, 56, 56) sequential2 output shape: (1, 128, 28, 28) sequential3 output shape: (1, 256, 14, 14) sequential4 output shape: (1, 512, 7, 7) pool1 output shape: (1, 512, 1, 1) dense0 output shape: (1, 10)loss 0.016, train acc 0.996, test acc 0.919耗时 3m 0.1s,train acc 十分惊人练习:numref:fig_inception中的Inception块与残差块之间的主要区别是什么?在删除了Inception块中的一些路径之后,它们是如何相互关联的?参考ResNet论文 :cite:He.Zhang.Ren.ea.2016中的表1,以实现不同的变体。对于更深层次的网络,ResNet引入了“bottleneck”架构来降低模型复杂性。请试着去实现它。bottleneck 结构: 通过前后两个 Conv1x1,先降低通道,再恢复通道。ref: https://blog.csdn.net/DanTaWu/article/details/111468257 在ResNet的后续版本中,作者将“卷积层、批量规范化层和激活层”架构更改为“批量规范化层、激活层和卷积层”架构。请尝试做这个改进。详见 :cite:He.Zhang.Ren.ea.2016*1中的图1。改变后,需要使用 batch_size = 64, lr = 0.005,即缩小学习率和 batchsize为什么即使函数类是嵌套的,我们仍然要限制增加函数的复杂性呢?计算资源问题。复杂度越高,优化算法找到良好局部最小值的可能性也会下降。更简单的模型更容易解释。更简单的模型泛化能力更好,因为它不依赖特定训练集的特征

7.5.BN

2024-08-06
d2ljulyfunnotes技术学习

mean 用法ref: https://blog.csdn.net/qq_40714949/article/details/115485140dim 写第几维,第几维就会被求和,并消失。x = torch.Tensor([1, 2, 3, 4, 5, 6]).view(2, 3) y_0 = torch.mean(x, dim=0) y_1 = torch.mean(x, dim=1) print(x) print(y_0) print(y_1)tensor([[1., 2., 3.], [4., 5., 6.]]) tensor([2.5000, 3.5000, 4.5000]) tensor([2., 5.])BN 层回忆提纲$$\mathrm{BN}(\mathbf{x}) = \boldsymbol{\gamma} \odot \frac{\mathbf{x} - \hat{\boldsymbol{\mu}}\mathcal{B}}{\hat{\boldsymbol{\sigma}}\mathcal{B}} + \boldsymbol{\beta}$$BN 层对上一层的输出进行规范化到 0 均值和 1 方差,同时学习一个缩放系数 gamma(初始为 1)和平移系数 beta(初始为 0)。符合直觉地,全连接层的每个元素对样本维求均值,mean.shape = (元素数) 。卷积层的每个通道对(样本,宽,高)求均值,mean.shape = (通道数)。下面 gamma 和 beta 是待学习参数,momentum 是上一次均值的权重(并不会直接采纳本次求得的均值,形同低通滤波)。非训练模式时,直接使用先前计算出来的 moving_mean, moving_var.import torch from torch import nn from d2l import torch as d2l def batch_norm(X, gamma, beta, moving_mean, moving_var, eps, momentum): # 通过is_grad_enabled来判断当前模式是训练模式还是预测模式 if not torch.is_grad_enabled(): # 如果是在预测模式下,直接使用传入的移动平均所得的均值和方差 X_hat = (X - moving_mean) / torch.sqrt(moving_var + eps) else: assert len(X.shape) in (2, 4) if len(X.shape) == 2: # 使用全连接层的情况,计算特征维上的均值和方差 mean = X.mean(dim=0) var = ((X - mean) ** 2).mean(dim=0) else: # 使用二维卷积层的情况,计算通道维上(axis=1)的均值和方差。 # 这里我们需要保持X的形状以便后面可以做广播运算 mean = X.mean(dim=(0, 2, 3), keepdim=True) var = ((X - mean) ** 2).mean(dim=(0, 2, 3), keepdim=True) # 训练模式下,用当前的均值和方差做标准化 X_hat = (X - mean) / torch.sqrt(var + eps) # 更新移动平均的均值和方差 moving_mean = momentum * moving_mean + (1.0 - momentum) * mean moving_var = momentum * moving_var + (1.0 - momentum) * var Y = gamma * X_hat + beta # 缩放和移位 return Y, moving_mean.data, moving_var.data class BatchNorm(nn.Module): # num_features:完全连接层的输出数量或卷积层的输出通道数。 # num_dims:2表示完全连接层,4表示卷积层 def __init__(self, num_features, num_dims): super().__init__() if num_dims == 2: shape = (1, num_features) else: shape = (1, num_features, 1, 1) # 参与求梯度,拉伸和偏移参数,分别初始化成1和0 self.gamma = nn.Parameter(torch.ones(shape)) self.beta = nn.Parameter(torch.zeros(shape)) # 非模型参数的变量初始化为0和1 self.moving_mean = torch.zeros(shape) self.moving_var = torch.ones(shape) def forward(self, X): # 如果X不在内存上,将moving_mean和moving_var # 复制到X所在显存上 if self.moving_mean.device != X.device: self.moving_mean = self.moving_mean.to(X.device) self.moving_var = self.moving_var.to(X.device) # 保存更新过的moving_mean和moving_var Y, self.moving_mean, self.moving_var = batch_norm( X, self.gamma, self.beta, self.moving_mean, self.moving_var, eps=1e-5, momentum=0.9) return Y net = nn.Sequential( nn.Conv2d(1, 6, kernel_size=5), BatchNorm(6, num_dims=4), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), BatchNorm(16, num_dims=4), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(16*4*4, 120), BatchNorm(120, num_dims=2), nn.Sigmoid(), nn.Linear(120, 84), BatchNorm(84, num_dims=2), nn.Sigmoid(), nn.Linear(84, 10))由上述示例知,BN 是放在激活函数和卷积或线性层之间。为什么只检查 moving_mean 所在的显存,而不需要检查 gamma, beta 所在的显存?chat: 在PyTorch中,nn.Parameter对象自动与模块(nn.Module)注册,并且会随模块一起被移动到指定的设备(CPU或GPU)上。当你调用.to(device)、.cuda()或.cpu()方法在一个nn.Module上时,它不仅会移动模块的参数(即由nn.Parameter定义的参数)到指定的设备,还会移动缓冲区(如批量归一化层的运行时均值和方差)。然而,这里的关键点是self.moving_mean和self.moving_var并不是通过nn.Parameter定义的,它们是作为普通的torch.Tensor对象存在的,不会自动随着模块的.to(device)调用而移动。因此,在BatchNorm类的forward方法中,需要手动检查self.moving_mean和self.moving_var是否与输入X在同一设备上。如果它们不在同一设备上,就需要手动将它们移动到X所在的设备,以保证计算能够正常进行。这是为了确保所有用于计算的张量都在同一设备上,从而避免因设备不匹配导致的错误。verified. loss 0.272, train acc 0.899, test acc 0.864学习到的参数:net[1].gamma.reshape((-1,)), net[1].beta.reshape((-1,))(tensor([2.0412, 4.2506, 2.4837, 2.8996, 0.3911, 3.2350], device='cuda:0', grad_fn=<ViewBackward0>), tensor([-0.7424, 2.6919, 2.7948, -2.8892, -0.3490, 1.4538], device='cuda:0', grad_fn=<ViewBackward0>))pure pytorchnet = nn.Sequential( nn.Conv2d(1, 6, kernel_size=5), nn.BatchNorm2d(6), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Conv2d(6, 16, kernel_size=5), nn.BatchNorm2d(16), nn.Sigmoid(), nn.AvgPool2d(kernel_size=2, stride=2), nn.Flatten(), nn.Linear(256, 120), nn.BatchNorm1d(120), nn.Sigmoid(), nn.Linear(120, 84), nn.BatchNorm1d(84), nn.Sigmoid(), nn.Linear(84, 10))loss 0.264, train acc 0.904, test acc 0.853炼金术从 BN 开始就很难解释网络层作用的原理了。Exercise在使用批量规范化之前,我们是否可以从全连接层或卷积层中删除偏置参数?为什么?可以,BN 层会消除前一层 $b$ 的影响比较LeNet在使用和不使用批量规范化情况下的学习率。绘制训练和测试准确度的提高。使用 (10 epochs):loss 0.264, train acc 0.904, test acc 0.853不使用 BN:loss 0.502, train acc 0.807, test acc 0.804学习率有多高?带 BN 学习率 1.0,不带则 0.9我们是否需要在每个层中进行批量规范化?尝试一下?不删除BN层,则loss 0.268, train acc 0.901, test acc 0.861 只保留第二个和第四个BN层,则loss 0.289, train acc 0.894, test acc 0.787 只保留第一个和第三个BN层,则loss 0.286, train acc 0.893, test acc 0.820 只删除第一个BN层,则loss 0.272, train acc 0.899, test acc 0.769 只删除第二个BN层,则loss 0.269, train acc 0.901, test acc 0.774 只删除第三个BN层,则loss 0.272, train acc 0.901, test acc 0.857 只删除第四个BN层,则loss 0.283, train acc 0.895, test acc 0.857 可以看出删除全连接层后面的批量规范化对结果影响不大,因此实际上是可以删除的可以通过批量规范化来替换暂退法吗?行为会如何改变?似乎是可以的,BN层兼具稳定训练过程和正则化的效果,将全连接阶段的BN层全部替换为弃置概率为0.5的Dropout层, 则loss 0.486, train acc 0.827, test acc 0.763,对比而言精度不如使用BN层的情况,而且train acc与test acc的差距也更大,说明BN反而能够起到比dropout更好更稳定的正则化效果确定参数beta和gamma,并观察和分析结果。通过实验观察模型中gamma和beta的情况。从结果来看,随着网络加深,beta的值逐渐稳定到0附近,而gamma的值则逐步稳定到1到2之间,说明BN层确实有助于稳定中间结果的数据分布查看高级API中有关BatchNorm的在线文档,以查看其他批量规范化的应用。研究思路:可以应用的其他“规范化”转换?可以应用概率积分变换吗?全秩协方差估计可以么?BatchNorm vs LayerNorm不错的图示解释: https://blog.csdn.net/Little_White_9/article/details/123345062稍正式的解释,同一个图: https://snailcoder.github.io/2024/05/01/batchnorm-and-layernorm.htm

4.5.weight-decay

2024-08-06
d2ljulyfunnotes技术学习

默认情况下,PyTorch 同时衰减权重和偏移可以手动设置不衰减偏置:def train_concise(wd): net = nn.Sequential(nn.Linear(num_inputs, 1)) for param in net.parameters(): param.data.normal_() loss = nn.MSELoss(reduction='none') num_epochs, lr = 100, 0.003 # 偏置参数没有衰减 trainer = torch.optim.SGD([ {"params":net[0].weight,'weight_decay': wd}, {"params":net[0].bias}], lr=lr) animator = d2l.Animator(xlabel='epochs', ylabel='loss', yscale='log', xlim=[5, num_epochs], legend=['train', 'test']) for epoch in range(num_epochs): for X, y in train_iter: trainer.zero_grad() l = loss(net(X), y) l.mean().backward() trainer.step() if (epoch + 1) % 5 == 0: animator.add(epoch + 1, (d2l.evaluate_loss(net, train_iter, loss), d2l.evaluate_loss(net, test_iter, loss))) print('w的L2范数:', net[0].weight.norm().item()

先定义一个丢弃层

2024-08-06
d2ljulyfunnotes技术学习

Dropout 法就是训练中传播时随机丢弃一些节点的权重。仅在训练期间有效,每次前向传播均会重新生成 mask手动实现# 先定义一个丢弃层 def dropout_layer(X, dropout): assert 0 <= dropout <= 1 # 在本情况中,所有元素都被丢弃 if dropout == 1: return torch.zeros_like(X) # 在本情况中,所有元素都被保留 if dropout == 0: return X mask = (torch.rand(X.shape) > dropout).float() return mask * X / (1.0 - dropout) dropout1, dropout2 = 0.2, 0.5 class Net(nn.Module): def __init__(self, num_inputs, num_outputs, num_hiddens1, num_hiddens2, is_training = True): super(Net, self).__init__() self.num_inputs = num_inputs self.training = is_training self.lin1 = nn.Linear(num_inputs, num_hiddens1) self.lin2 = nn.Linear(num_hiddens1, num_hiddens2) self.lin3 = nn.Linear(num_hiddens2, num_outputs) self.relu = nn.ReLU() def forward(self, X): H1 = self.relu(self.lin1(X.reshape((-1, self.num_inputs)))) # 只有在训练模型时才使用dropout if self.training == True: # 在第一个全连接层之后添加一个dropout层 H1 = dropout_layer(H1, dropout1) H2 = self.relu(self.lin2(H1)) if self.training == True: # 在第二个全连接层之后添加一个dropout层 H2 = dropout_layer(H2, dropout2) out = self.lin3(H2) return out net = Net(num_inputs, num_outputs, num_hiddens1, num_hiddens2)简洁实现net = nn.Sequential(nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), # 在第一个全连接层之后添加一个dropout层 # 这里 dropout1 是一个实数 nn.Dropout(dropout1), nn.Linear(256, 256), nn.ReLU(), # 在第二个全连接层之后添加一个dropout层 nn.Dropout(dropout2), nn.Linear(256, 10)) def init_weights(m): if type(m) == nn.Linear: nn.init.normal_(m.weight, std=0.01) net.apply(init_weights)

样本 * 通道 * h * w

2024-08-05
d2ljulyfunnotes技术学习

阅读网络结构的函数参数# 样本 * 通道 * h * w # 输入为 X = torch.randn(1, 1, 224, 224) net = nn.Sequential( # [解释] 输入通道 1,输出通道 96,输出大小 54 * 54,注意这里 kernel 没有刚好填到最右端,下取整为 54. 卷积核有 96 个(每个输入-输出通道组合拥有一个卷及核) nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), # 减小卷积窗口,使用填充为2来使得输入与输出的高和宽一致,且增大输出通道数 nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), # 使用三个连续的卷积层和较小的卷积窗口。 # 除了最后的卷积层,输出通道的数量进一步增加。 # 在前两个卷积层之后,汇聚层不用于减少输入的高度和宽度 nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2), nn.Flatten(), # 这里,全连接层的输出数量是LeNet中的好几倍。使用dropout层来减轻过拟合 nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p=0.5), # 最后是输出层。由于这里使用Fashion-MNIST,所以用类别数为10,而非论文中的1000 nn.Linear(4096, 10)

7.3.nin

2024-08-05
d2ljulyfunnotes技术学习

关于卷积层的提示注意输入通道和输出通道是全连接的,即:若单层图像的核有 X 个(取决于图像长宽,kernel_size, padding 和 stride),输入通道 n,输出通道为 m,则核函数有 X * n * m 个核参数则有 $X \times n \times m \times \texttt{kernel_size} \times \texttt{kernel_size}$ 个ref: https://zh.d2l.ai/chapter_convolutional-neural-networks/channels.html特色相比 vgg,nin 主要特色两个:block 内部是 Conv + ReLU + Conv(kernel_size = 1) + ReLU + Conv(kernel_size = 1) + ReLU + MaxPool,给每个像素做了通道到通道的全连接最后直接是 384 通道到分类数通道的 nin block,没有 Linear 层全局平均汇聚层将图像的大小压缩至 1 * 1,不改变 n 和 channels,也不改变维数。def nin_block(in_channels, out_channels, kernel_size, strides, padding): return nn.Sequential( nn.Conv2d(in_channels, out_channels, kernel_size, strides, padding), nn.ReLU(), nn.Conv2d(out_channels, out_channels, kernel_size=1), nn.ReLU(), nn.Conv2d(out_channels, out_channels, kernel_size=1), nn.ReLU()) net = nn.Sequential( nin_block(1, 96, kernel_size=11, strides=4, padding=0), nn.MaxPool2d(3, stride=2), nin_block(96, 256, kernel_size=5, strides=1, padding=2), nn.MaxPool2d(3, stride=2), nin_block(256, 384, kernel_size=3, strides=1, padding=1), nn.MaxPool2d(3, stride=2), nn.Dropout(0.5), # 标签类别数是10 nin_block(384, 10, kernel_size=3, strides=1, padding=1), nn.AdaptiveAvgPool2d((1, 1)), # 将四维的输出转成二维的输出,其形状为(批量大小,10) nn.Flatten())X = torch.rand(size=(1, 1, 224, 224)) for layer in net: X = layer(X) print(layer.__class__.__name__,'output shape:\t', X.shape)Copy to clipboard Sequential output shape: torch.Size([1, 96, 54, 54]) # 包含整个 nin_block MaxPool2d output shape: torch.Size([1, 96, 26, 26]) Sequential output shape: torch.Size([1, 256, 26, 26]) MaxPool2d output shape: torch.Size([1, 256, 12, 12]) Sequential output shape: torch.Size([1, 384, 12, 12]) MaxPool2d output shape: torch.Size([1, 384, 5, 5]) Dropout output shape: torch.Size([1, 384, 5, 5]) Sequential output shape: torch.Size([1, 10, 5, 5]) AdaptiveAvgPool2d output shape: torch.Size([1, 10, 1, 1]) Flatten output shape: torch.Size([1, 10]

7.4.googlenet

2024-08-05
d2ljulyfunnotes技术学习

https://www.cv-foundation.org/openaccess/content_cvpr_2015/html/Szegedy_Going_Deeper_With_2015_CVPR_paper.html[ ] 不错的论文解读: https://www.cnblogs.com/harrymore/p/17263443.html相比于 nin,google net 的 inception 块有 4 条路径。注意在合并时是直接在 channels 维度拼接而不是相加。但 googlenet 的最后重新引入了 Linear 层。import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l class Inception(nn.Module): # c1--c4是每条路径的输出通道数 def __init__(self, in_channels, c1, c2, c3, c4, **kwargs): super(Inception, self).__init__(**kwargs) # 线路1,单1x1卷积层 self.p1_1 = nn.Conv2d(in_channels, c1, kernel_size=1) # 线路2,1x1卷积层后接3x3卷积层 self.p2_1 = nn.Conv2d(in_channels, c2[0], kernel_size=1) self.p2_2 = nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1) # 线路3,1x1卷积层后接5x5卷积层 self.p3_1 = nn.Conv2d(in_channels, c3[0], kernel_size=1) self.p3_2 = nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=2) # 线路4,3x3最大汇聚层后接1x1卷积层 self.p4_1 = nn.MaxPool2d(kernel_size=3, stride=1, padding=1) self.p4_2 = nn.Conv2d(in_channels, c4, kernel_size=1) def forward(self, x): p1 = F.relu(self.p1_1(x)) p2 = F.relu(self.p2_2(F.relu(self.p2_1(x)))) p3 = F.relu(self.p3_2(F.relu(self.p3_1(x)))) p4 = F.relu(self.p4_2(self.p4_1(x))) # 在通道维度上连结输出 return torch.cat((p1, p2, p3, p4), dim=1) b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1), nn.ReLU(), nn.Conv2d(64, 192, kernel_size=3, padding=1), nn.ReLU(), nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32), Inception(256, 128, (128, 192), (32, 96), 64), nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64), Inception(512, 160, (112, 224), (24, 64), 64), Inception(512, 128, (128, 256), (24, 64), 64), Inception(512, 112, (144, 288), (32, 64), 64), Inception(528, 256, (160, 320), (32, 128), 128), nn.MaxPool2d(kernel_size=3, stride=2, padding=1)) b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128), Inception(832, 384, (192, 384), (48, 128), 128), nn.AdaptiveAvgPool2d((1,1)), nn.Flatten()) net = nn.Sequential(b1, b2, b3, b4, b5, nn.Linear(1024, 10)

ROADMAP

2024-07-30
julyfunnotes

Metatest回忆提纲需要什么:该名词是做什么的方法是什么,需要什么(接口)非常重要[ ] 尽快学习语言[ ] yyu 的 rl 教程 https://hrl.boyuai.com/[x] https://hrl.boyuai.com/chapter/1/%E5%A4%9A%E8%87%82%E8%80%81%E8%99%8E%E6%9C%BA[ ] d2l 中,搭建优秀网络结构[x] 7.4 Done[x] 7.7 Done[ ] 看下 Googlenet 训练时间和显存占用[ ] https://d2l.ai/chapter_attention-mechanisms-and-transformers/queries-keys-values.html[ ] 上层模型训练 https://blog.csdn.net/qq_42589613/article/details/139207148[ ] 部署[ ] 加速有用[ ] Notion 三件套 #private https://www.notion.so/tt-tang/30b7b6709a9641f5bf77b16ca103855c[ ] OPENAI RL https://spinningup.openai.com/en/latest/user/introduction.html[ ] 知乎 https://www.zhihu.com/column/c_1186982555915599872[ ] 实际 research 代码框架 https://github.com/DLR-RM/stable-baselines3[ ] mkdocs 网页渲染 typst[ ] 编译原理 [[北大编译实践]][x] https://pku-minic.github.io/online-doc/#/lv1-main/structure[x] https://pku-minic.github.io/online-doc/#/lv1-main/lexer-parser[ ] https://pku-minic.github.io/online-doc/#/lv1-main/parsing-main[ ] zig 语法 https://www.zhihu.com/question/50121841/answer/2725592129[ ] fishbot 与电机控制[ ] 类型体操 pk[ ] day1 https://www.skyzh.dev/blog/2022-01-22-rust-type-exercise-in-database-executors/[ ] 向量化执行引擎: https://blog.csdn.net/qq_35423190/article/details/123129172[ ] comptime: https://blog.zhuangty.com/zig-lang-comptime/[ ] 自建通用优化库。先学习 yolo 等,以考虑自变量是否可以是非固定空间。[[cs自学指南]]一般[ ] next.js 创建动态内容 https://segmentfault.com/a/1190000009604779TOWRITE电能相比热能的优势解释与预测image.png image.png项目概述在这个项目中,你将实现一个自编码器,用于探索和生成通过组合不同类别的特征向量而生成的混合图像。本项目主要集中在使用Fashion MNIST数据集,并且作为一个挑战,你将把相同的方法应用于CIFAR-100数据集。任务详情:数据集准备和过滤:加载并预处理Fashion MNIST数据集,确保数据被标准化并分割为训练集和测试集。过滤数据集以专注于特定类别(例如,运动鞋和T恤)。自编码器实现:设计并实现一个自编码器模型,包括编码器和解码器部分。编码器将输入图像压缩到低维特征空间,解码器则将特征向量还原为图像。训练自编码器:使用训练集数据训练自编码器模型,确保模型能够有效地重建输入图像。计算类别特征质心:计算每个类别的特征质心(即每个类别在特征空间中的平均特征向量)。生成平均图像:使用类别特征质心通过解码器生成每个类别的平均图像。生成混合图像:通过组合不同类别的特征向量生成混合图像,例如,组合运动鞋和T恤的特征向量生成混合图像。CIFAR-100挑战练习:将上述方法应用于CIFAR-100数据集,生成不同类别(例如,汽车和飞机)的混合图像。最终目标创建混合对象。例如,先生成运动鞋和T恤的混合图像,然后生成汽车和飞机的混合图像。报告要求在项目结束时,你需要撰写一份适当长度的报告,可能至少需要半页。在报告中,你应该描述你是如何完成任务的。具体包括:遇到的困难(由于方法导致的,例如“训练样本不足以收敛”,而不是技术上的问题如“无法通过pip安装包”)。采取的缓解困难的步骤。对你所做工作的总体描述,解释你是如何理解任务的,以及你为解决任务所做的工作,用通俗语言描述,无需代码。你方法的潜在局限性,可能存在的问题,以及在不同数据或稍有不同的条件下可能会遇到的困难。如果你有如何扩展这个项目的有趣想法,也请描述一下。在这个项目中,你将尝试使用CycleGAN将马的图像转换成猫的图像。由于这是一个较为复杂的任务,项目中已经提供了大量的代码,但你仍需要添加一些代码并进行训练和评估。任务详情:添加训练Cycle GAN所需的代码:完善数据加载器(data loaders)等必要的代码部分,以便能够加载和预处理马和猫的图像数据集。确保数据加载器能够处理图像数据并将其转换为适合CycleGAN模型训练的格式。训练和优化Cycle GAN:训练CycleGAN模型,使其能够将马的图像转换成猫的图像,并能将转换后的猫图像还原为马图像。优化模型的超参数(如学习率、批量大小等),从小分辨率图像开始训练,以逐步了解模型的行为和超参数的影响。训练过程中需要监控损失函数,并根据损失值调整训练策略。可视化生成的图像:生成并展示一些转换后的图像样本,展示从马图像转换成猫图像的效果。由于缺乏定量评估指标,主要通过定性评估生成图像的质量。报告要求在项目结束时,你需要撰写一份适当长度的报告,可能至少需要半页。在报告中,你应该描述你是如何完成任务的。具体包括:遇到的困难:描述在方法上遇到的困难,例如“训练样本不足以收敛”,而不是技术上的问题如“无法通过pip安装包”。采取的缓解困难的步骤:描述你为解决这些困难所采取的措施。总体描述:对你所做工作的总体描述,解释你是如何理解任务的,以及你为解决任务所做的工作,用通俗语言描述,无需代码。潜在局限性:描述你方法的潜在局限性,可能存在的问题,以及在不同数据或稍有不同的条件下可能会遇到的困难。扩展想法:如果你有如何扩展这个项目的有趣想法,也请描述一下

No more posts to load.