基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

本期主题:启动并运行TensorFlow

参考书籍:

【AO-AZ-90-蜥蜴书-中文版-Hands on Machine Learning with Scikit Learn and Tensorflow】

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

审核目标:成功跑通蜥蜴书中的前馈神经网络框架,并且成功带入给定的数据集进行分析——注意是实习公司的数据集,不再是原来购买的数据集

本小节整体框架——TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q1:为什么TensorFlow中有创建图谱这种操作?很本元的一个问题

Q3:batch和epoches的含义是什么

Q2:这里的手动渐变和梯度下降以及自动梯度下降到底是干什么的?用在常规的网络里面是干什么

明白这玩意啥意思了

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

批量梯度下降和随机梯度下降

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

大白话5分钟带你走进人工智能-第十一节梯度下降之手动实现梯度下降代码(6)

梯度下降之手动实现梯度下降和随机梯度下降的代码

000

#借助随机种子,创建模拟训练集
import numpy as np
np.random.seed(1) #随机种子np.random.seed(1)和直接的随机数np.random.randn(100,1)区别在哪里?
X=2*np.random.randn(10000,1)
Y=4+3*X+np.random.randn(10000,1)
X_b=np.c_[np.ones((10000,1)),X]
#print(X_b)

#学习率,迭代次数,样本数和初始化设定
learning_rate=0.1
n_iterations=500
m=10000
theta=np.random.randn(2,1)
count=0

#循环迭代,促成梯度下降--计算梯度的公式——迭代
for iterations in range(n_iterations):
    count+=1
    gradients=1/m*X_b.T.dot(X_b.dot(theta)-Y)
    theta=theta-learning_rate*gradients

print(count)
print(theta)

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q1: 固定随机种子np.random.seed(x)和正常的表达式中的 随机数np.random,randn(x,x)的区别在哪里?np.random.randn(x,x)中括号的作用是干什么?

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

000


#借助随机种子,创建模拟训练集
import numpy as np
from sklearn.linear_model import SGDRegressor
np.random.seed(1)
X=2*np.random.rand(100,1)
Y=4+3*X+np.random.rand(100,1)
X_b=np.c_[np.ones((100,1)),X]
print(X_b)  #跟Batch gradient descent都是一样的前面模拟随机环境

#设置可变学习率,迭代次数,样本数和初始化设定
t0,t1=5,50
def learning_schedule(t):   #学习率随着t的变化而变化,较为特殊
    return t0/(t+t1)
n_epochs=1000
m=100
theta=np.random.randn(2,1)

#循环迭代,促成梯度下降
learning_rate=0.1
for epoch in range(n_epochs):
    for i in range(m):
        random_index=np.random.randint(m)
        #为了解决维度问题?在索引屈指
        xi=X_b[random_index:random_index+1]
        yi=Y[random_index:random_index+1]
        gradients=2*xi.T.dot(xi.dot(theta)-yi)
        learning_rate=learing_schedule(epoch*m+i)
        theta=theta-learing_rate*gradients

print(theta)

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

TensorFlow意义以及其启动运行

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

使用Pycharm安装TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

为啥要隔离,不用以前的库了呢,非得用再用VirtualEnv再创建一个新环境

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

更新完毕,可运行文件.py难以直接找到,已有的库也被全部清空

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

但是project interpreter还是可以再调整的

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

安装的太方便了

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

手动计算渐变与实现梯度下降——基于TensorFlow的函数

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

创造第一个计算图谱——基于TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

如何理解梯度下降法? (qq.com)

非常实例化的梯度下降

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

创建这块出了点问题

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

自动计算梯度

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

使用优化器——所有这一块跟前面的是做出了什么样的衔接


#使用函数训练
#以mse最小化为目标进行optimizer的训练

x=tf.train.xxxoptimizer(learning_rate=learning_rate)
training_op=x.minimize(mse)

optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
traning_op=optimizer.minimize(mse)

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

使用MINIBATCH,小批量梯度下降

import pandas
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler
import tensorflow as tf

#加载数据
housing=fetch_california_housing()
scale=StandardScaler()
m,n=housing.data.shape
scaled_housing_data=scale.fit_transform(housing.data)
print("数据集:{}行,{}列".format(m,n))
housing_data_plus_bias=np.c_[np.ones((m,1)),scaled_housing_data]

n_epochs=1000
learning_rate=0.01

X=tf.placeholder(tf.float32,shape=(None, n+1),name="x")
Y=tf.placeholder(tf.float32,shape=(None, 1),name="y")
theta=tf.Variable(tf.random_uniform([n+1,1],-1.0,1.0,seed=42),name="theta")
y_pred=tf.matmul(X, theta, name="predictions")
error=y_pred-Y
mse=tf.reduce_mean(tf.square(error),name="mse")
optimizer=tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
trainging_op=optimizer.minimize(mse)

init=tf.global_variables_initializer()

n_epochs=10
batch_size=100
n_batched=int(np.ceil(m/batch_size))    #ceil()方法返回x的值上限

def fetch_batch(epoch,batch_index,batch_size):
    know=np.random.seed(epoch*n_batched+batch_index)
    print("know的值:",know)
    indices=np.random.randint(m,size=batch_size)
    X_batch=scaled_housing_data_plus_bias[indices]
    Y_batch=housing.target.reshape(-1,1)[indices]
    return X_batch,Y_batch

with tf.Session() as sess:
    sess.run(init)

    for epoch in range(n_epochs):
        for batch_index in range(n_batched):
            X_batch, Y_batch=fecth_batch(epoch,batch_index,batch_size)
            sess.run(training_op,feed_dict={X:X_batch,Y:Y_batch})

    best_theta=theta.eval()

print(best_theta)

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q1:xx.data.shape?
m,n=xx.data.shape
shape输出二元组可以保证满足

https://www.sogou.com/link?url=hedJjaC291OB0PrGj_c3jHF3JVBxwgdKnSC852Hk8j4ptVTizOIthLBn4VA8J3SxhEDcdNnX8Dq4HbByHzFTmw..

numpy扩展与填充

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q2:np.c_[np.ones((m,1)), xx]

注意区分array形成的数组没有逗号,区分于数组
reshape重塑表内的元素

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q4:tf.constant(),
Q9:tf.Session() sess:
Q10:sess.run()

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

同问

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

我怎么感觉tf这么麻烦,创个计算的优势呢

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q7:matmul(tf.transpose(),error)找不到,好像懂了一点以前的图计算

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Q8:assign(xx,xx-learning_rate*gradients)
内部做函数变化,以生成新的列表

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

图解Pandas的宝藏函数:assign

这篇深入浅出pandas值得学一学

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

这篇的assign()新增函数也值得学习

pandas得敢去做,敢去尝试,才能熟练

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

还需要多学习一下文本内容的pandas操作,特别是检索相应数值是否包含在对应的列表中

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

apply()和assign()的函数操作差不多

基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

Original: https://blog.csdn.net/weixin_51117061/article/details/121638663
Author: HIT_SunJiankun
Title: 基于神经网络的实战演练(一)-启动,运行与解读TensorFlow

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/520773/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球