张量是多维数组(列表),阶是张量的维数。
#1.创建一个张量:
tf.constant(张量内容, dtype=数据类型)
#2.将numpy的数据类型转换为Tensor数据类型
tf.convert_to_tensor(数据名, dtype=数据类型)
#3.创建全为0的张量
tf.zeros(维度)
#3.创建全为1的张量
tf.ones(维度)
#4.创建全为指定值的张量
tf.fill(维度,指定值)
#5.生成正态分布的随机数,默认均值为0,标准差为1
tf.random.normal(维度,mean=均值,stddev=标准差)
#6.生成截断式正态分布的随机数 生成数据在均值附近
tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
常用函数
#强制tensor转换为改数据类型
tf.cast(张量名,dtype=数据类型)
#计算张量维度上元素的最小值,最大值
tf.reduce_min(张量名)
tf.reduce_max(张量名)
#计算张量沿着指定维度的平均值,和 axis = 0列向 *** 作,=1横向 *** 作
tf.reduc_mean(张量名,axis= *** 作轴)
tf.reduc_sum(张量名,axis= *** 作轴)
#tf.Variable()将变量标记为“可训练”,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用改函数标记待训练参数。
w = tf.Variable(tf.random.normal([2,2], mean=0,stddev=1))
#数学运算
#四则运算: 只有维度相同的张量才可以做四则运算
tf.add, tf.subtract, tf.multiply, tf.divide
#平方、次方与开方:
tf.square, tf.pow, if.sqrt
#矩阵乘
tf.matmul
#将输入特征与标签配对,构建数据集
data = tf.data.Dataset.from_tensor_slices((输入特征,标签))
#with结构记录计算过程,gradient求出张量的梯度
with tf.GradientTape() as tape:
w = tf.Variable(tf.constant(3.0))
loss = tf.pow(w,2)
grad = tape.gradient(loss,w)#(函数,对谁求导)
#enumerate 它可遍历每个元素(如列表、元组或字符串),返回(索引,元素)
for i,element in enumerate(容器):
print(i,element)
#tf.one_hot() 函数将待转换数据转换为one-hot形式的数据输出
tf.one_hot(待转换数据,depth=几分类)
#tf.nn.softmax()使输出符合概率分布
#返回张量沿指定维度最大值的索引
tf.argmax(张量名,axis= *** 作轴)
网络搭建
#import :
import tensorflow as tf
import os
import numpy as np
from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, MaxPool2D, Dropout, Flatten, Dense
from tensorflow.keras import Model
train, test
#定义网络结构
model = tf.keras.models.Sequential([网络结构])
#网络结构举例:
#拉直层
tf.keras.layers.Flatten()
#全连接层
tf.keras.layers.Dense(神经元个数,activation='激活函数',kernel_regularizer=正则化)
#激活函数可选:
relu,softmax,sigmoid,tanh
#kernel_regularizer可选
tf.keras.regularizers.l1(), tf.keras.regularizers.l2()
#卷积层
tf.keras.layers.Conv2D(filters =卷积核个数,kernel_size=卷积核尺寸 ,strides=卷积步长,padding="valid" or "same")
#LSTM层
tf.keras.layers.LSTM()
#配置神经网络的训练方法
model.compile(optimizer = 优化器
,loss = 损失函数
,metrics = ["准确率"])
#Optimizer可选:
'sgd' or tf.keras.optimizers.SGD(lr=学习率, momentum=动量参数)
'adagrad' or tf.keras.optimizers.Adagrad(lr=学习率)
'adadelta' or tf.keras.optimizers.Adadelta(lr=学习率)
'adam' or tf.keras.optimizers.Adam(lr=学习率,beta_1=0.9,beta_2=0.999)
#loss可选:
'mse' or tf.keras.losses.MeanSquaredError()
'sqarse_categorcal_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)
#Metrics可选:
'accuracy' :y_,y都是数值
'categorical_accuracy' : y_,y都是独热码
'sparse_categorical_accuracy': y_是数值 y是独热码
#执行训练过程
model.fit(训练集的输入特征, 训练集的标签
,batch_szie =
,epochs =
,validation_split = 从训练集划分多少比例给测试集)
#打印网络的结构和参数统计
model.summary
#数据增强(增大数据量)
image_gen_train = tf.keras.preprocessing.image.ImageDataGenerator(
rescale =
rotation =
width_shift_range =
height_shift_range = )
image_gen_train.fit(x_train)
搭建网络Class
class MyModel(Model):
def __init__(self):
super(MyModel, self).__init__()
定义网络结构块
def call(self, x):
实现前向传播
return y
读取保存模型
#读取模型 load_weights(路径文件名)
checkpoint_save_path = './checkpoint/mnist.ckpt'
if os.path.exists(checkpoint_save_path + '.index'):
model.load_weights(checkpoint_save_path)
#保存模型
cp_callback = tf.keras.callbacks.ModelCheckpoint(
filepath = 路径文件名
,save_weights_only = True/False
,save_best_only = True/False)
history = model.fit(x_train, y_train
,...
,callbacks = [cp_callback])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)