【学习笔记】初见tensorflow

 

这篇文章让我们做线性回归。我们先加载必要的库

import tensorflow as tf
import pandas as pd
import numpy as np

 

我们同样也需要读取数据

df = pd.read_csv('california_housing_train.csv')

 

我们首选需要对数据进行随机处理,同时也对median_house_value以千为单位进行计算,方便模型更快的学习。顺便检查下数据

df = df.reindex(np.random.permutation(df.index))
df['median_house_value'] /= 1000
df.describe()

这里给我们的特征是total_rooms,预测的则是median_house_value。

书中的要求是回归,并且将RMSE降到180以下。

先设置占位符以及输入值:

x1 = np.array(df['total_rooms'])[:, np.newaxis]
y1 = np.array(df['median_house_value'])[:, np.newaxis]

xs = tf.placeholder(tf.float32, [None, 1])
ys = tf.placeholder(tf.float32, [None, 1])

 

定义神经层:

def add_layer(inputs, input_size, output_size, activation_function=None):
    weights = tf.Variable(tf.random_normal([input_size, output_size]))
    biases = tf.Variable(tf.zeros([output_size]) + 0.1)
    Wx_b = tf.matmul(inputs, weights) + biases
    if activation_function is None:
        output = Wx_b
    else:
        output = activation_function(Wx_b)
    return output

 

定义损失函数:

def loss(prediction, ys):
    _loss = tf.sqrt(tf.reduce_mean(tf.square(prediction - ys)))
    return _loss

这里损失用的RMSE而不是MSE请注意下。

 

定义训练方法,原文用的梯度下降法,这里我们用Adam算法:

def train_step(loss,learning_rate):
    _train = tf.train.AdamOptimizer(learning_rate).minimize(loss)
    return _train

 

下面我们就要设计神经层了,这里我用了2层,第一层用了tanh函数(如果你把原始数据画成散点图,你会发现线性根本解决不了问题,非线性效果要好很多。),第二层则没有。同时变量初始化。


output_1 = add_layer(xs, 1, 10, activation_function=tf.nn.tanh)
pred = add_layer(output_1, 10, 1, activation_function=None)
_loss = loss(pred, ys)
_train = train_step(_loss, 0.01)

sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

最终我训练了5000步,发现RMSE到115基本就不会再变化了。


for i in range(5000):
    sess.run(_train, feed_dict={xs: x1, ys: y1})
    if i % 50 == 0:
        print(sess.run(_loss, feed_dict={xs: x1, ys: y1}))

文章同时希望我们换一换特征来看看,这里不再赘述。整个代码结构和原文略有不同,因为这么构建的话,我们有很多调整空间(在这里并没有显示出来)。可视化的问题留到以后再谈了除了matplotlib,tensorboard也是一个很不错的可视化工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值