张量是多维数组(列表),阶是张量的维数。
#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])



