多元线性回归在tensorflow实现

tensorflow实现多元线性回归

形如:y = ax + bx1 + c
多元线性回归与简单线性回归模型基本一致, 只是在参数的维度上面多了一列, 一元线性回归里面参数为[1, 1], 而多元线性回归里面的参数变为了[2, 1]
同时, 对于训练数据, 一元线性回归的训练集为[3, 1], 表示总共3个训练数据, 每个训练数据都是一维数字; 而多元线性回归的训练参数变成了[n, 2]
n个训练数据, 每个训练数据都是2维数据; 下面我们就参照简单线性回归来完成多元线性回归的建模

tensorflow 教程 之 基本用法

Tensors用法

tensor表示张量, 在tensorflow中用来存储数据

1
3 //数字3表示维度为0的张量
[1, 2, 3] // 该数组表示维度为1的张量
[[1, 2], [2, 3], [4, 5]] // 表示维度为3的张量, 矩阵的shape为[3, 2]

如何导入tensorflow

1
import tensorflow as tf

tensorflow 常量的用法 - tf.constant

1
constant_one = tf.constant(3.0, tf.float32)
constant_two = tf.constant(10.0) // 默认类型为tf.float32
init_op = tf.global_variables_initializer() // 定义初始化的操作
session = tf.Session() //创建会话
session.run(init_op) // 初始化变量
result = session.run([constant_one, constant_two]) //使用session.run()获取到tensor的值
print ('each of constant_one, constant_two is:{}'.format(result)) // 最后打印的结果为[3.0, 4.0]

tensorflow基本API - tf.add

1
constant_one = tf.constant(3.0, tf.float32)
constant_two = tf.constant(10.0) // 默认类型为tf.float32
add_op = tf.add(constant_one, constant_two) //将两个tensor相加
init_op = tf.global_variables_initializer() // 定义初始化的操作
session = tf.Session() //创建会话
session.run(init_op) // 初始化变量
result = session.run(add_op) //使用session.run()获取到tensor的值
print ('each of constant_one, constant_two is:{}'.format(result)) // 最后打印的结果为7

tensorflow基本API - tf.placeholder

1
x_data = tf.placeholder(dtype=tf.float32, name='x_data') //分别定义占位符, 后面运行程序的时候feed_dict传入
y_data = tf.placeholder(dtype=tf.float32, name='y_data') //同上
add_op = tf.add(constant_one, constant_two)
init_op = tf.global_variables_initializer() // 定义初始化的操作
session = tf.Session() //创建会话
session.run(init_op) // 初始化变量

print ('x_data + y_data = {}'.format(session.run(add_op, feed_dict={x_data: 10.0, y_data: 12}))) // 得到的结果是22, 注意这边feed_dict中的key就是placeholder变量, 并不是feed_dict={"x_data":10.0, "y_data": 12}

tensorflow基本API - tf.Variable

1
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W * x + b
init_op = tf.global_variables_initializer() // 定义初始化的操作
session = tf.Session() //创建会话
session.run(init_op) // 初始化变量

print ("linear_model result:{}".format(session.run(linear_model, feed_dict={x: 10}))) //结果为2.7, 但是tensorflow返回的确是2.70000005, 目前没办法解释

tensorflow基本API - tf.square

1
x = tf.Variable(10)
init_op = tf.global_variables_initializer() // 定义初始化的操作
session = tf.Session() //创建会话
session.run(init_op) // 初始化变量
print("square of x is :{}".format(session.run(tf.square(x)))) //平方操作, 打印结果为:square of x is :100

学习了tensorflow最基本的用法,下面我们将会使用学到的tensorflow来定义最简单的线性回归模型

Linux 内核升级

yum安装带aufs模块的3.10内核

1
$ cd /etc/yum.repos.d
$ wget http://www.hop5.in/yum/el6/hop5.repo
$ yum install kernel-ml-aufs kernel-ml-aufs-devel
$ vi /etc/grub.conf //设置default=0,表示第一个title下的内容为默认启动的kernel
$ reboot
$ uname -r //查看版本
$ grep aufs /proc/filesystems //查看内核是否支持aufs

Python 在CentOS上的安装

Python在Linux安装

1
2
3
4
5
6
7
8
$ wget http://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz //等待下载完成
$ tar -xzvf Python-3.6.0.tgz //解压Python包
$ cd Python-3.6.0 //进入Python文件中
$ mkdir /usr/local/python3 //建立python3的目录防止覆盖原来的python2版本
$ ./configure --prefix=/usr/local/python3 //编译
$ make & make install //编译安装
$ ln -s /usr/local/python3/bin/python3 /usr/bin/python //在/usr/bin/下建立python3的软连接
$ python -V //验证Python版本

安装完成之后问题解决

1
$ vi /usr/bin/yum

将#!/usr/bin/python 修改为以前版本的Python, 比如:#!/usr/bin/python2.6

如何在Linux上安装tensorflow

Tensorflow简介

Tensorflow 是一个开源的神经网络计算框架, 它使用数据流图来表示计算过程。图中的节点表示数学运算, 同时在节点之间的边表示多维数据集(张量);tensorflow具有灵活的架构,能够允许你将计算程式部署到台式机/服务器/移动设备的一个或者多个CPU/GUP上面;Tensorflow最开始是由在Google大脑的调研人员以及工程师开发出来,目的是为了引领深度学习以及深度神经网络的发展, 但是这个系统在很多领域都是通用的。

Python安装

  • 可参考上篇文章

Tensorflow的安装

安装python3.3+ 默认已经安装了pip, 我们可以使用pip install tensorflow 来安装, 直接可以安装所有相关的依赖包, 非常方便

tensorflow验证

使用python 进入命令行模式, 输入import tensorflow as tf 如果没有报错则安装成功, 如果有报错则需要安装相关依赖

tensorflow 依赖的python包有哪些?

如果是离线安装,则需要先安装如下python依赖, 再使用whl来安装tensorflow;

numpy、protobuf、setuptools、setuptools、six、wheel

GLIBCXX NOT Found GLIBCXX_3.4.15’ not found

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ strings /usr/lib/libstdc++.so.6 | grep GLIBCXX

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

我们看到当前GCC版本中的确没有GLIBCXX_3.4.15。

1
2
3
4
5
6
7
8
$ wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6_4.7.2-5_amd64.deb //等待下载完成
$ ar -x libstdc++6_4.7.2-5_amd64.deb //libstdc++包
$ tar -xvf data.tar.xz //解压data.tar.gz
$ cd data/usr/lib/XXX-linux-gun //
$ cp libstdc++.so.6.0.17 /usr/lib64
$ rm libstdc++.so.6
$ ln libstdc++.so.6.0.17 libstdc++.so.6
$ strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX //最后使用命令查看当前支持的GLICXX版本

GLIC2.15 NOT Found

1
2
3
4
5
6
7
8
9
10
11
12
13
$ strings /lib64/libc.so.6 |grep GLIBC  //查看GLIBC的版本
$ wget http://mirror.bjtu.edu.cn/gnu/glibc/glibc-2.15.tar.gz //下载glibc版本
$ wget http://mirror.bjtu.edu.cn/gnu/glibc/glibc-ports-2.15.tar.gz //下载glibc插件
$ tar -zxvf glibc-2.15.tar.gz
$ tar zxvf glibc-ports-2.15.tar.gz
$ mv glibc-ports-2.15 glibc-2.15/ports
$ mkdir build
$ cd build
$ ../glibc-2.15/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
$ make -j4
$ make install
$ strings /lib64/libc.so.6 |grep GLIBC //验证安装是否成功
$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so lib/libc.so.6 //如果安装失败, 则使用该命令恢复原来的状态

算法第一章-二分搜索法

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功

如何让HexoServer 后台运行

在Hexo 工程目录下面创建一个app.js文件作为项目的启动文件,并将如下代码拷贝到文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var spawn = require('child_process').spawn;             // 注册nodeJs子进程
free = spawn('hexo', ['server', '-p 80']); // 注入命令参数

free.stdout.on('data', function (data) {
console.log('standard output:\n' + data); // 捕获标准输出并将其打印到控制台
});

free.stderr.on('data', function (data) {
console.log('standard error output:\n' + data); // 捕获标准错误输出并将其打印到控制台
});

free.on('exit', function (code, signal) {
console.log('child process eixt ,exit:' + code); // 注册子进程关闭事件
});

安装forever 或者 pm2 来启动该 Hexo Server,就可以了。

JavaScriptCore简介

前端开发的同学应该知道,浏览器核心模块主要是渲染引擎和JavaScript引擎两部分组成。前者用于处理页面布局,渲染及DOM结构等,后者用于JavaScript的解析、执行及DOM交互等。JavaScriptCore是一种JavaScript引擎,主要为webkit提供脚本处理能力(其主要以safari浏览器为代表)。JavaScriptCore是开源webkit的一部分。

|