tensorflow学习笔记(一)

先罗列一下编译环境以及教程来源:

  • 编译程序: VScode
  • python版本:3.6.6
  • Anaconda版本:Anaconda3-2019-10
  • tensorflow版本:2.0.0
  • pandas版本:0.25.1

简单的线性模型

在这里插入图片描述

以上是简单的单层线性拟合模型。
代码以及注释如下:

import tensorflow as tf import pandas as pdimport matplotlib.pyplot as plt

print("Tensorflow version: {}".format(tf.version))
data = pd.read_csv('./tensorflow-data/Income1.csv')
x = data.Education
y = data.Incomemodel = tf.keras.Sequential()#顺序模型
model.add(tf.keras.layers.Dense(1,input_shape=(1,)))#建立模拟函数,参数:输入数据的维度与输出数据的维度
model.compile(optimizer='adam',loss='mse')#优化方法计算梯度贴近真实值,损失函数均方差
print(model.summary())
#返回模型的形状
print(model)
#history = model.fit(x,y,epochs=5000)#多次训练拟合模型
#plt.scatter(data.Education,data.Income)
plt.show()


梯度下降算法

致力于寻找函数极值点的算法,随机选取一点,计算梯度,根据设置好的步长向梯度变化最大的方向(增大或减少)移动,多次重复找到极值点。同时在tf的计算中,程序会自己选取多个随机起始点,以避免出现局部极值点的问题。

梯度下降的过程就是拟合真实函数的过程,是减少损失函数计算出的值的过程,也就是学习的过程。

梯度的输出是一个由若干导数构成的向量,它的每一个分量都对应函数对输入向量相应方向上的偏导。

多层感知器

单层神经元存在无法拟合异或运算的缺陷,也可以说单层神经元一般只能拟合线性可分的数据的模型。

激活函数负责规定输出,最简单的线性激活:大于或者小于阈值输出到下一神经元,反之则不进行输出。

  • relu函数小于阈值不进行输出,大于则进行输出

  • sigmoid激活把上一层的输出映射到0-1内,公式如下:

p ( X ) = 1 1 + e ( x ) p(X) = \frac {1} {1+e^{(x)}} p(X)=1+ex1

  • tanh激活做tanh运算

  • Leak relu激活部分小于阈值的值会被映射,不会被清零

多层感知器代码实现:

import tensorflow as tf 
import pandas as pd
import matplotlib.pyplot as plt

print("Tensorflow version: {}".format(tf.version))
data = pd.read_csv('./tensorflow-data/Advertising.csv')
print(data.head())
x = data.iloc[:,1:-1]
y = data.iloc[:,-1]
model = tf.keras.Sequential([tf.keras.layers.Dense(10,input_shape=(3,),activation='relu'),    tf.keras.layers.Dense(1)])
print(model.summary())
# plt.scatter(data.radio,data.sales)
plt.show()

结构如下:
在这里插入图片描述
中间层十个隐藏单元,40个由封装好的函数创建的参数,因为本次数据有三个特征量,每一个特征量需要一个权重,一组特征量需要一个偏移量。因此一个隐藏单元存在4个参数,得到一共40参数。
第二层十个单元输出的到的特征量需要十个权重,在加一个偏移量,得到11个参数。

代码如下:

import tensorflow as tf 
import pandas as pd
import matplotlib.pyplot as plt
import os
print("Tensorflow version: {}".format(tf.version))
data = pd.read_csv('./tensorflow-data/Advertising.csv')
print(data.head())
x = data.iloc[:,1:-1]
y = data.iloc[:,-1]
model = tf.keras.Sequential([tf.keras.layers.Dense(10,input_shape=(3,),activation='relu'),    tf.keras.layers.Dense(1)])
#
check_path="./tensorflow-model/lessonTwo/ch-1.ckpt"
dir_path = os.path.dirname(check_path)
callback = tf.keras.callbacks.ModelCheckpoint(check_path,save_weights_only=True,verbose=1,period=10)
#第一个参数自动保存的路径,第二个是保存权重还是模型,第三个参数表示是否显示提示,第四个指步长
print(model.summary())
model.compile(optimizer='adam',loss='mse')
history = model.fit(x,y,epochs=2000,callbacks=[callback])
model.save("./tensorflow-model/lessonTwo/modal.h5")#保存模型model.save_weights("./tensorflow-model/lessonTwo/modal_weight")
#建立新的模型用load_weights,载入权重

源码传送门

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值