tensorflow学习笔记(二)

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

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

逻辑回归与线性回归

归输出的值是简单的是与否,使用sigmoid激活函数将输出的结果映射到0-1之间,输出一个概率值。
逻辑回归的损失函数,平方差损失函数惩罚的是损失为同一数量级的情况,对于分类问题,他输出的值会很小,速度会非常慢。我们使用交叉熵损失函数,输出更大损失函数的值
交叉熵损失函数刻画的是实际输出概率与期望输出概率之间的距离,值越小概率越接近。
公式:
p为期望输出,q为实际输出

h ( p , q ) = − ∑ x p ( x ) log ⁡ q ( x ) h(p,q)=-\sum_{x}^{}p(x)\log{q(x)} h(p,q)=xp(x)logq(x)
上述函数会放大损失,方便训练

以下是一个例子:

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/credit-a.csv',header=None)
print(data.head())
x = data.iloc[:,:-1]
y = data.iloc[:,-1].replace(-1,0)
model = tf.keras.Sequential([
	tf.keras.layers.Dense(4,input_shape=(15,),activation='relu'), 
	tf.keras.layers.Dense(4,activation='relu'),    
	tf.keras.layers.Dense(1,activation='sigmoid')
])
# #
check_path="./tensorflow-model/lessonThree/ch-1.ckpt"
dir_path = os.path.dirname(check_path)
callback = tf.keras.callbacks.ModelCheckpoint(check_path,save_weights_only=True,verbose=1,period=200)# 
#第一个参数自动保存的路径,第二个是保存权重还是模型,第三个参数表示是否显示提示,第四个指步长
print(model.summary())
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=["acc"])
history = model.fit(x,y,epochs=2000,callbacks=[callback])
#训练过程中的记录
model.save("./tensorflow-model/lessonThree/modal.h5")
#保存模型
model.save_weights("./tensorflow-model/lessonThree/modal_weight")
plt.plot(history.epoch,history.history.get("acc"))
plt.show()
#建立新的模型用load_weights,载入权重

结果如下图:
在这里插入图片描述

softmax分类

softmax要求每一个样本必须属于某一个类别,而且可能的样本均被覆盖。
公式如下:

θ ( z ) j = e j z ∑ k = 1 K e k z , f o r j = 1 , 2 , 3..... , K \theta(z)_j=\frac{e^z_j}{\sum_{k=1}^Ke^z_k} ,for j=1,2,3.....,K θ(z)j=k=1Kekzejz,forj=1,2,3.....,K
softmax各样本分量和为1,只有两个类别时,与上文相同。
而在tf.keras中我们可以使用:

categorical_crossentropy#
sparse_categorical_crossentropy#数字编码

来计算交叉熵
以下是fashion mnist数据集的训练模型代码:

import tensorflow as tf 
import pandas as pd
import matplotlib.pyplot as plt
import os  
print("Tensorflow version: {}".format(tf.version))
(train_image,train_label),(test_image,test_label) = tf.keras.datasets.fashion_mnist.load_data()#网络下载
print("train_image :" + str(train_image.shape))
#建立新的模型用load_weights,载入权重

#归一化
train_image = train_image/255
test_image = test_image/255

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))
#扁平化为长度是28*28的向量
model.add(tf.keras.layers.Dense(128,activation='relu'))
#过大会导致过拟合,太小会丢失特征
model.add(tf.keras.layers.Dense(10,activation='softmax'))
#计算映射到概率
model.compile(    
	optimize='adam',    
	loss='sparse_categorical_crossentropy',    
	metrics=['acc']
)
#check_path="./tensorflow-model/lessonThree/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)
#第一个参数自动保存的路径,第二个是保存权重还是模型,第三个参数表示是否显示提示,第四个指步长

model.fit(train_image,train_label,epochs=10)

#model.save("./tensorflow-model/lessonThree/modal.h5")
#保存模型
#model.save_weights("./tensorflow-model/lessonThree/modal_weight")
#建立新的模型用load_weights,载入权重
model.evaluate(test_image,test_label)
#评估模型
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值