我想从Android API的异步执行方式迁移到Rx.特别是我的应用程序中有一个照片库,当用户滑动照片时,它经常从服务器获取新照片(它是基于ViewPager的横向滑动).
它发生了这样的事情:每当ViewPager想要一张新照片时,它就会要求它的演示者(用MVP术语)来获取它,然后再将它带到模型中.该模型发送了一个新意图IntentService来下载新图像:

在的情况下,IntentService如果我们有很多的请求下载一个图像,这些请求在排队在一个单一的IntentService和处理一个时间.
使用Rx,下载图像的许多请求产生了很多Observables并且可能消耗了大量内存(我还没有完成对Rx的重构,因此没有进行实验,但可能有人已经考虑过它).
我对你的不满感到满意吗?有没有更好的方法与RxAndroid做同样的事情?
我这样训练我的模型:
for i in range(5):
optimizer.zero_grad()
y = next_input()
loss = model(y)
loss.backward()
optimizer.step()
Run Code Online (Sandbox Code Playgroud)
并得到这个错误
RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time.
Run Code Online (Sandbox Code Playgroud)
为什么要求我保留图表?如果衍生品被释放,它可能会重新计算它们。为了证明这一点,请考虑以下代码:
for i in range(5):
optimizer.zero_grad()
model.zero_grad() # drop derivatives
y = next_input()
loss = model(y)
loss.backward(retain_graph=True)
optimizer.step()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,前一次迭代的导数也被归零,但 Torch 并不关心,因为标志retain_graph=True已设置。
我说得对吗,取消了(即删除保留衍生品)model.zero_grad()的影响?retain_graph=True
考虑以下代码:
>>> import numpy as np
>>> l = [21,22,24,24,26,97]
>>> np.quantile(l, 0.25)
22.5
Run Code Online (Sandbox Code Playgroud)
文档说:
线性:i + (j - i) *fraction,其中fraction是i和j包围的索引的小数部分。
谁能解释一下是什么i,在这个例子中j以及fraction我们如何得到22.5?