为什么统计学家也应该学学 TensorFlow
在小轩哥的带领下,我也稍微看了一点点 Tensorflow,顺手把轩哥的蟒蛇代码“翻译”成了 R 代码(主要工作就是用 R 里面的 tensorflow 包,然后查找替换 .
为 $
):
数据生成部分:
p1 = .3; mu1 = 0; mu2 = 5; sigma1 = 1; sigma2 = 1.5
N = 1000
x = ifelse(rbinom(N, 1, p1), rnorm(N, mu1, sigma1), rnorm(N, mu2, sigma2))
hist(x, 30)
建模部分:
library(tensorflow)
# Define data
t_x = tf$placeholder(tf$float32)
# Define parameters
t_p1_ = tf$Variable(0, dtype=tf$float32)
t_p1 = tf$nn$softplus(t_p1_)
t_mu1 = tf$Variable(0, dtype=tf$float32)
t_mu2 = tf$Variable(1, dtype=tf$float32)
t_sigma1_ = tf$Variable(1, dtype=tf$float32)
t_sigma1 = tf$nn$softplus(t_sigma1_)
t_sigma2_ = tf$Variable(1, dtype=tf$float32)
t_sigma2 = tf$nn$softplus(t_sigma2_)
ds = tf$contrib$distributions
# Define model and objective function
t_gm = ds$Mixture(
cat=ds$Categorical(probs=c(t_p1, 1 - t_p1)),
components=list(
ds$Normal(t_mu1, t_sigma1),
ds$Normal(t_mu2, t_sigma2)
)
)
t_ll = tf$reduce_mean(t_gm$log_prob(t_x))
# Optimization
optimizer = tf$train$GradientDescentOptimizer(0.5)
train = optimizer$minimize(-t_ll)
# Run
sess = tf$Session()
init = tf$global_variables_initializer()
sess$run(init)
for (i in seq_len(500)) {
sess$run(train, dict(t_x = x))
}
cat('Estimated values:', unlist(sess$run(c(t_p1, t_mu1, t_mu2, t_sigma1, t_sigma2))))
cat('True values:', c(p1, mu1, mu2, sigma1, sigma2))
- 已编辑
yihui 好,顶,赞!?
Ihavenothing 管理员,您好!请问发帖的键在哪里?我找不到啊求告知,谢谢!
lamei 到论坛首页 https://d.cosx.org ,点按钮“新的话题”。你现在大概是在主站文章下面,那里只能回复,不能发新帖。
好文,顶!
大概可以管窥蠡测TensorFlow的强大了, 慵懒的量变定义(显示的初始化),强大的数学计算,简洁的语法,哈哈
7 天 后
学习了,好文啊
3 个月 后
yihui
学习了.
cat('Estimated values:', unlist(sess$run(c(t_p1, t_mu1, t_mu2, t_sigma1, t_sigma2))))
似乎需改为
cat('Estimated values:', unlist(lapply(sess$run(c(t_p1, t_mu1, t_mu2, t_sigma1, t_sigma2)), FUN=function(x) x$item())))
不知是否我本地tensorflow for R环境有问题,
tf$Varible算出的结果是外部numpy对象, 没法直接unlist, 也不能直接传递给R变量.