andrej kaparthy的recurrentjs库的python实现

recurrent-js-python的Python项目详细描述


#python中的recurrentjs

跟随[andrej kaparthy]的脚步(http://cs.stanford.edu/people/karpathy/),这里是[recurrentjs]的python实现(http://cs.stanford.edu/people/karpathy/recurrentjs/)([github](https://github.com/karpathy/recurrentjs))。



虽然python有很好的自动差异化库,但缺少无编译版本。尤其是recurrentjs非常好地利用回调和垃圾收集来支持backprop穿越时间。在这个实现中,目标是减少对这些抽象的依赖,并有一个简单的backprop step类。最后,如果这很容易实现,那么最终我们将实现一个c++版本,它将使大多数计算步骤都很快,除了一些中间的backprop步骤分配,但这些步骤并不能构成大部分计算,并且保持api和语法清晰。

r/>
在这个实现中,目标很简单:

*move off callbacks
*启用批处理(通过从矩阵中提取行时隐藏的丢失、张量和高级索引)
*形成一个基线,以便在非脚本语言中实现



角色生成演示,并导入相同的文本进行角色模型学习。困惑很快下降到7-8左右(与javascript版本中的行为相似)。


From RecurrentJS import*

output-size=-1
epoch-size=-1
lettertoindex=5
lettertoindex={}
indextoletter={}
hidden-size=[20,20]
generator="lsTM"
vocab=[]
regc=0.000001 L2正则化强度
学习率=0.01学习率
clipval=5.0


全局输入大小
全局输出大小
全局纪元大小
全局字母索引
全局索引器
对所有字符进行计数
d={}
对于已发送的句子:
对于已发送的c:
如果d中的c:
d[c]+=1
否则:
d[c]=1

d创建指针
lettertoindex={}
indextoletter={}
vocab=[]
注意:从一开始,因为我们将有开始和结束标记!
也就是说,开始标记将是模型字母向量中的索引0
;结束标记将是下一个字符softmax中的索引0
q=1
对于d中的ch.keys():
如果d[ch]>;=计数阈值:
将字符添加到vocab
letter to index[ch]=q
indextoleter[q]=ch
vocab.append(ch)
q+=1
x=g.row_cluck(model['wil',ix)
forward prop the sequence learner
如果generator=="rnn":
out_struct=forwardrnn(g,model,hidden_size,x,prev)
否则:
out_struct=forwardlstm(g,model,hidden_size,x,prev)
return out_struct

def initmodel()用法:
model={}
lstm=initlstm(字母大小,隐藏大小,输出大小),如果generator=="lstm"else initrnn(字母大小,隐藏大小,输出大小)
model['wil']=randmat(输入大小,字母大小,0.08)
model.update(lstm)

return model

def costfun(model,sent):
获取一个模型和一个句子,然后计算损失。还返回可用于执行backprop的graph
ix_source=0如果i=-1 else lettertoindex[已发送[i]];第一步:从开始标记开始
ix_target=0如果i==n-1 else lettertoindex[已发送[i+1]];最后一步:以结束标记结束

prev=lh

#将梯度设置为对数概率
log probs=lh.output将输出解释为logprobs
probs=softmax(logprobs)计算softmax概率

log2ppl+=-np.log(probs.w[ix_target,0])并累积基2对数概率并进行平滑ing
成本+=-np.log(probs.w[ix_target,0])

将梯度写入日志概率
logprobs.dw=probs.w
logprobs.dw[ix_target]=1


return g,ppl,cost

text_data=open("paulgraham_text.txt","rt").readlines()
initvocab(text_data,1)
model=initmodel()
ppl_list=[]
median_ppl=[]
tick_iter=0

def tick():
global tick_iter
global ppl_list
global median_ppl
sentix=np.random.randint(0,len(文本数据))
sent=text_data[sentix]
g,ppl,cost=costfun(model,sent)
g.backward()
solver.step(model,learning_rate,regc,clipval)
ppl-list.append(ppl)
tick_iter+=1

如果勾选项%100==0:
中值=np.中值(ppl_list)
ppl_list=[]
中值附加(中值)




javascript代码)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将springboot war部署到debian jetty8   java破坏了函数,即使它看起来是正确的   当MockMvc不可自动编译时,java会有选择地从Spring Security向其应用单个过滤器   java AndroidStudio每秒播放n次生成的声音   JavaJBossSeam:继承的方法被拦截了吗?   ScheduledExecutorService中线程默认名称中池号的java含义   在Java中用递归方法实现类Fibonacci的递归   java虚拟路径/文件夹   java即时与ZoneDateTime。转换到另一时区   用GaussLegendre算法在java中逼近Pi   java RecyclerView findFirstVisibleItemPosition()返回1   java根据当前经过身份验证的用户的角色返回不同的JSON对象   java从内部类访问扩展类的方法   Android程序中的Java语法WRT静态方法   可选参数初始化Java字符串文字时出错