Simpy put, we want to make the gradient flow smooth and richer with every new architecture design.
Vishal Rajpu
t,
YOLOv9: New Object Detection King
昨天讲到一段
话:
简而言之,我们希望在
新的架构设计中,
让
梯度
丰盈地
流淌。
最近回顾 CNN 架构时,层出不穷的设计,就像 Obsidian 眼花缭乱的插件市场一样,令人迷醉且迷茫。
读到这句话时,仿佛眉心被击中,向后躺倒的一瞬间,看见一座耸立的大厦,滂沱的乌云下, Loss 如注,层层叠叠地从顶层流下,它要浸润每一块砖瓦,像镀上一层黄金,在夕阳下熠熠生辉。
让梯度更丰盈地流淌,就是神经网络结构设计的主线。
让工作流顺畅地涌动,就是 obsidian 器为体用的主干道。
所以,扫清河道上的每一颗石子,哪怕再小。
昨天
展示的 Ho
ver 事项面板中,还有个问题,如何在切换日记时自动刷新 Tasks?
这一段是摸索 Tasks 插件代码,觉得过程像解谜一样,挺有意思的。跳过不影响阅读。
Tasks 的设计很巧妙,为了避免无效刷新,只会在代码块重写、修改任务或打开新代码块时加载。当固定“今日事项”笔记,切换日记时,它并不能自动刷新。
Tasks 没有提供 dataview 强制刷新的命令。但考虑到每次改变任务,插件会自动刷新任务,猜测注册了事件。Ctrl+Shift+i 打开控制台,在 source 标签下找到 tasks-plugin 代码,搜索 `.on(`。只有 10 个注册事项,一个个看过去。发现 this.metadataCache.on("changed" 是缓存数据变化时的事件。所在的函数名是 subscribeToCache,即订阅缓存。而刚好上面一个函数是 notifySubscribers。通知订阅者?
Wow!大概率这就是强制刷新 Tasks 的函数了。那么如何调用呢?
答应呼之欲出:执行 tasks.cache.notifySubscribers() 就可以刷新视图
在控制台中执行下面代码,果然刷新了视图。
let target = await app.plugins.getPlugin("obsidian-tasks-plugin");
target.cache.notifySubscribers()
一瞬间,我突然想到,Templater 有个启动时执行命令的功能。之前我想用这个功能实现自动生成日记,但没有成功,因为并不是每天重启软件的。
新建文件【打开文件时刷新 Tasks 视图】,复制下面内容:
app.tp = tp;
let target = await app.plugins.getPlugin("obsidian-tasks-plugin")
if(!app.is_refresh_tasks_on_file_open){
target.is_refresh_tasks_on_file_open = true;
console.log("注册事件:打开文件时刷新 Tasks 视图");
app.workspace.on(
'file-open',
(file)=>{
target.cache.notifySubscribers();
}
);
}
-%>
Ctrl+, 进入 Templater 设置页面。在 Startup Templates 选项卡中添加脚本文件。