【学习笔记】TensorFlow2.0搭建神经网络学习笔记

1 常用函数

(1)tf.Variable()
标记训练网络中的参数,如W,将变量标记为”可训练“,神经网络训练中,常用该函数标记待训练参数
w=tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
#标记w为待训练参数,初始化生成两行两列的正态分布的随机数,均值为0,标准差为1
(2)tf.matmul ,矩阵乘
(3)tf.data.Dataset.from_tensor_slices,切分传入张量的第一维度,生成输入特征与标签对,构建数据集
data=tf.data.Dataset.from_tensor_slices((输入特征,标签)) #numpy和Tensor格式均可用
(4)tf.GradientTape(),求梯度
with tf.GradientTape() as tape: #with结构记录计算过程,gradient求张量梯度
若干个计算过程
grad=tape.gradient(函数,求导对象)
eg:with tf.GradientTape( ) as tape:
w = tf.Variable(tf.constant(3.0))
loss = tf.pow(w,2)
grad = tape.gradient(loss,w) #对w求偏导
(5)enumerate(列表),枚举函数,常在for循环中使用
for i, element in enumerate(seq)
(6)tf.one_hot,独热码,在分类问题中,常用独热码做标签,标记类别:1表示是,0表示非
(7)tf.nn.softmax,分类函数,使输出符合概率分布
(8)assign_sub,赋值操作,更新参数的值并返回,如更新w
w = tf.Variable(4)
w.assign_sub(1) #w自减1
(9)tf.argmax(张量名,axis=操作轴),返回张量沿指定维度最大值的索引
(10)tf.where(条件语句,真返回A,假返回B)
(11)np.random.RandomState.rand(维度),返回一个[0,1)之间的随机数
(12)np.vstack(数组1,数组2),将两个数组按垂直方向叠加

2 基础知识

(1)指数衰减学习率
指数衰减学习率(2)正则化:在损失函数中引入模型复杂度指标,利用给W加权值,弱化训练数据的噪声
在这里插入图片描述
正则化可以缓解过拟合

3 使用八股搭建神经网络

用Tensorflow API:tf.keras搭建网络八股
(1)import相关模块
(2)train,test:喂入训练集,测试集特征及标签
(3)model=tf.keras.models.Sequential:搭建网络结构(顺序网络结构)
model=tf.keras.models.Sequential([网络结构])#描述各层网络
网络结构:
tf.keras.layers.Flatten() #展平层
tf.keras.layers.Dense(神经元个数, activation= “激活函数“ ,kernel_regularizer=哪种正则化) #全连接层
tf.keras.layers.Conv2D(filters = 卷积核个数, kernel_size = 卷积核尺寸,strides = 卷积步长, padding = " valid” or “same”) #卷积层
tf.keras.layers.LSTM()#循环神经网络
(4)model.compile:配置训练方法,如优化器,损失函数,优化指标
model.compile(optimizer = 优化器,loss = 损失函数,metrics = [“准确率”] )
metrics:网络评测指标
‘accuracy’ :y_和y都是数值,如y_=[1] y=[1]
‘categorical_accuracy’ :y_和y都是独热码(概率分布),如y_=[0,1,0] y=[0.256,0.695,0.048]
‘sparse_categorical_accuracy’ :y_是数值,y是独热码(概率分布),如y_=[1] y=[0.256,0.695,0.048]
(5)model.fit:执行训练过程,训练集特征及标签,batch,epoch
model.fit (训练集的输入特征, 训练集的标签, batch_size= , epochs= , validation_data=(测试集的输入特征,测试集的标签),validation_split=从训练集划分多少比例给测试集,validation_freq = 多少次epoch测试一次)#_data和_split二选一
(6)model.summary:打印网络参数结构和参数统计

搭建跳层网络结构 class替换Sequential
class MyModel(Model): #Model,继承Tensorflow里的Model类
def init(self):
super(MyModel, self).init()
定义网络结构块
def call(self, x):
调用网络结构块,实现前向传播
return y
model = MyModel()

4 八股功能扩展

(1)自制数据集

import tensorflow as tf
from PIL import Image
import numpy as np
import os
#制作数据集
train_path = './mnist_image_label/mnist_train_jpg_60000/'
train_txt = './mnist_image_label/mnist_train_jpg_60000.txt'
x_train_savepath = './mnist_image_label/mnist_x_train.npy'
y_train_savepath = './mnist_image_label/mnist_y_train.npy'

test_path = './mnist_image_label/mnist_test_jpg_10000/'
test_txt = './mnist_image_label/mnist_test_jpg_10000.txt'
x_test_savepath = './mnist_image_label/mnist_x_test.npy'
y_test_savepath = './mnist_image_label/mnist_y_test.npy'
def generateds(图片路径/path,标签文件/txt):
			f = open(txt,'r') #打开标签文件,只读
			contents = f.readlines() #读取整个文件所有行,保存在contents列表中,每行作为一个元素
			f.close()
			x,y_ = [],[]
			for content in contents:#逐行取出
				value = content.split() #以空格分割,图片路径为value[0],标签路径为value[1],存入列表
				img_path = path+value[0]
				img = Image.open(img_path)#读入图片 
				img = np.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值