Tensorflow_basic

tf.keras交叉熵

二分类
binar_crossentropy
多分类

  • categorical_crossentropy#label进行独热编码时使用
  • spares_categorical_crossentropy#输出label数值编码时,比如0,1,2…
    来计算softmax

pandas

import pandas as pd
data = pd.read_csv('filename',head=None)#如果没有表头head=None
data.head()#打印出表头
data.iloc[:,-1].value_counts()#count最后一列数值频数
x = data.iloc[:,1:-1]#取第一列到倒数第二列
y = data.iloc[:,-1]

逻辑回归

import tensorflow as tf
import pandas as pd
data = pd.read_csv('filename',head=None)#如果没有表头head=None
data.head()#打印出表头
data.iloc[:,-1].value_counts()#count最后一列数值频数
x = data.iloc[:,1:-1]#取第一列到倒数第二列
y = data.iloc[:,-1]
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(4, input_shape=(15,),activation='relu')) #15为输入维度(特征)
model.add(tf.keras.layers.Dense(4,activation='relu'))#第二层不需要去定义输入,会自动推断
model.add(tf.keras.layers.Dense(1, activation='sigmoid')
model.summary()#会输出模型
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])#acc记录准确性,也可记录loss
history= model.fit(x,y,epochs=1000)#训练
history.history.keys()#history.history是个字典会,这里会输出dict_keys(['loss','acc'])
plt.plot(history.epoch, history.history.get('loss'))#画出loss变化图
test = data.iloc[:,1:-1]
model.predict(test) #预测

softmax多分类

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#加载fashin_mnist数据集
(train_image,train_label),(test_image,test_label)= tf.keras.datasets.fashion_mnist.load_data()
train_image.shape#(60000,28,28)60000张28X28图片,都是array格式
train_label.shape#(60000,)60000个标签
plt.imshow(train_image[0])#打印出第一张,取值是0-255
#归一化
train_image = train_image/255
test_image = test_image/255#取值都是从0-1
model =  tf.keras.Sequential()
#输入不是一维,所以添加这一层扁平层 
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))#变成向量
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))#十个输出为概率分布和为1
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])
model.fit(train_image, train_label,epochs=1000)
model.evaluate(test_image,test_label)#评价

独热编码

train_label#前一节fashionmnist,array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)
# 如果是分类城市
beijing [1,0,0]#位置为1其他为0
shanghai [0,1,0]
shenzhen [0,0,1] 
#这种情况下loss就使用
loss = 'categorical_crossentropy'
#下面对前面的fashion_mnist进行独热编码
train_label_onehot = tf.keras.utils.to_categorical(train_label)
train_label_onehot[0]#array([0., 0., 0., 0., 0., 0., 0., 0., 0., 1.], dtype=float32),长度为10,第9个为1
train_label[0]#9
# 模型
test_label_onehot = tf.keras.utils.to_categorical(test_label)
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))#变成向量
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))#十个输出为概率分布和为1
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['acc'])#这里的loss变了
# 训练,输入数据为独热编码数据
model.fit(trainimage, train_label_onehot,epochs=10)
# 预测
predict = model.predict(test_image)
predict[0]#softmax结果,array([1.9723153e-05, 2.7903539e-08, 1.4551173e-06, 9.5434382e-07,
       8.0094524e-06, 9.6416617e-05, 2.3268458e-06, 1.5682883e-03,
       8.5663942e-06, 9.9829429e-01], dtype=float32)
np.max(predict[0])#0.9982943
np.argmax(predict[0])# 9 最大预测值序号
test_label[0]#9 

Dropout抑制过拟合

#每次训练会在validation上验证loss以及acc情况
model.fit(train_image, train_label,epochs=10,,validation_data = (test_image,test_label))
import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
#加载fashin_mnist数据集
(train_image,train_label),(test_image,test_label)= tf.keras.datasets.fashion_mnist.load_data()
train_image.shape#(60000,28,28)60000张28X28图片,都是array格式
train_label.shape#(60000,)60000个标签
plt.imshow(train_image[0])#打印出第一张,取值是0-255
#归一化
train_image = train_image/255
test_image = test_image/255#取值都是从0-1
model =  tf.keras.Sequential()
#输入不是一维,所以添加这一层扁平层 
model.add(tf.keras.layers.Flatten(input_shape=(28,28)))#变成向量
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))#十个输出为概率分布和为1
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])
history = model.fit(train_image, train_label,epochs=10,validation_data = (test_image,test_label))
# 字典内存储
history.history.keys()#dict_keys(['loss', 'acc', 'val_loss', 'val_acc'])
# 画图
plt.plot(history.epoch,history.history.get('loss'),label='loss')
plt.plot(history.epoch,history.history.get('val_loss'), label='val_loss')
plt.legend()

在这里插入图片描述
在这里插入图片描述
可以看到train loss一直在下降,但到后面val_loss不减反增,这就是过拟合,下图也验证了过拟合,验证集上acc更低
过拟合:训练数据集得分高,测试数据上得分不高
在这里插入图片描述

#师兄dropout
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape = (28,28)))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))#丢弃概率
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(10,activation='softmax'))

正则化可以在activation()中设定参数实现

函数式API

import tensorflow as tf
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#加载fashin_mnist数据集
(train_image,train_label),(test_image,test_label)= tf.keras.datasets.fashion_mnist.load_data()
train_image = train_image/255.0
test_image = test_image/255.0
#模型
input = tf.keras.Input(shape = (28,28))
x =tf.keras.layers.Flatten()(input)
x =tf.keras.layers.Dense(32,activation='relu')(x)
x =tf.keras.layers.Dropout(0.5)(x)
out =tf.keras.layers.Dense(10,activation='softmax')(x)
model = tf.keras.Model(inputs= input,outputs=out)
# 判断两个数据集是否一样的概率
input1 = tf.keras.Input(shape = (28,28))
input2 = tf.keras.Input(shape = (28,28))
x1 =tf.keras.layers.Flatten()(input1)
x2 =tf.keras.layers.Flatten()(input2)
x = tf.keras.layers.concatenate([x1,x2])
x = tf.keras.layers.Dense(32,activation='relu')(x)
output = tf.keras.layers.Dense(32,activation='sigmoid')(x)#逻辑模型
model = tf.keras.Model(inputs = [input1,input2],outputs=output)
#这样函数API的形式有利于搭建多输入

加载数据集

(train_imagine,train_label),(test_imagine,test_label)= tf.keras.datasets.fashion_mnist.load_data()

优化器

tf.keras.optimizers.Adam()

存储模型

Saving/loading whole models (architecture + weights + optimizer state)

from keras.models import load_model
model.save('my_model.h5')  # creates a HDF5 file 'my_model.h5'
del model  # deletes the existing model
model = load_model('my_model.h5')

Saving/loading only a model’s architecture

# save as JSON
json_string = model.to_json()

# save as YAML
yaml_string = model.to_yaml()

# model reconstruction from JSON:
from keras.models import model_from_json
model = model_from_json(json_string)

# model reconstruction from YAML:
from keras.models import model_from_yaml
model = model_from_yaml(yaml_string)

Saving/loading only a model’s weights

model.save_weights('my_model_weights.h5')
model.load_weights('my_model_weights.h5')
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pinn山里娃

原创不易请多多支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值