学习tensorflow2 之1 北京大学 曹健笔记

通道顺序与pytorch不一致; [batch,height,width,channel]

0、numpy的属性

xx.ndim    xx.shape   xx.dtype

np.expand_dims(resize(mask_, (IMG_HEIGHT, IMG_WIDTH), mode='constant', preserve_range=True), axis=-1) #增加最后一维度

1、创建张量tensor

1.1 constant生成

tf.constant(张量内容,dtype=数据类型(可选))

1.2、numpy转Tensor

tf.convert_to_tensor(数据名,dtype=数据类型(可选))

1.3、创建全0、1及指定值的张量

tf.zeros(维度)    tf.zeros([2,3])

tf.ones(维度)

tf.fill(维度,指定值)

1.4 生成随机数

正态分布 tf.random.normal(维度,mean=均值,stddev=标准差)   

2、常用函数

强制转换数据类型

tf.cast(张量名,dtype=数据类型) 

维度上的最大值、最小值、平均值、和

tf.reduce_min(张量名) 维度上的最大值

tf.reduce_max(张量名)  维度上的最大值

axis操作维度方向

tf.reduce_mean(张量名,axis=操作轴) 

tf.reduce_sum(张量名,axis=操作轴) 

将变量标记为’可训练’ ,标记待训练的参数

tf.Variable() 

数学运算函数

加减乘除:tf.add(张量1,张量2)  tf.subtract   tf.multiply  tf.divide

平方、次方、开方:tf.square  tf.pow(张量名,n次方)  tf.sqrt 

矩阵乘:tf.matmul

生成输入特征/标签对 tf.data.Dataset.from_tensor_sliceswith tf.GradientTape() as tape:

data = tf.data.Dataset.from_tensor_slices((输入特征,标签))

tf.GradientTape()  实现某个函数对指定参数的求导运算

with结构记录计算过程,gradient求出张量的梯度

with tf.GradientTape() as tape:

        若干个计算过程

grads = tape.gradient(函数loss, 对谁求导w)

one-hot encoding

tf.one_hot(待转换数据,depth=几分类)

tf.nn.softmax使输出符合概率分布

softmax(yi)= e^{^{yi}}

assign_sub   w参数更新

assign_sub(需要自减的内容)  减去更换参数的值并返回

tf.argmax返回张量沿指定维度最大值索引

tf.argmax(张量名,axis=操作轴)

训练参数不像pytorch样可跟踪的,需用with tf.GradientTape() as tape:

with tf.GradientTape() as tape:
    predictions = model(images)
    loss = loss_object(labels, predictions)
gradients = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(gradients, model.trainable_variables))

二、tensorflow.keras 里常用的模块有

layers:包含Dense, Conv2D,Flatten,Dropout,MaxPool2D,BatchNormalization, Activation,

optimizers:Adam,

models:Sequential,

datasets:mnist,fashion_mnist,

卷积就是特征提取器:CBAPD

C: Conv2D(filters,kernel_size,padding)

B:BatchNormalization()   批标准化

A:Activation    激活

P:MaxPool2D

D:Dropout(概率值)

keras数据集下载的地方:C:\Users\zjcnzcl\.keras

plot_imgs = np.hstack(imgs)   #水平方向拼接
#plt.imshow(plot_imgs,cmap='gray')  matplotlib还要学习下

三、tf.keras搭建六步法:

1.import  2.train和test

3.顺序结构:model=tf.keras.models.Sequential([网络层结构])  前向传播

        model = models.models.Sequential()

        model.add()的形式

实例化形式:

class MyModel(Model)

model= MyModel

class MyModel(Model):

        def __init__(self):
        super(MyModel, self).__init__()

                #定义网络结构块

        def call(self, x):

        #调用网络结构块,实现前向传播
        return y
model = MyModel() #实例化

3、或非顺序结构  函数式API

model = models.Model(inputs= input_tensor, outputs = output_tensor)

4.model.compile(optimizer=优化器,loss=损失函数,metrics=['准确率'])  优化器、损失函数、评测指标

损失函数(目标函数):选择损失函数,训练过程中将其最小化;

        二分类:二元交叉熵 binary crossentropy 

        多分类:分类交叉熵 categorical crossentropy

        回归:均方误差  mean-squared error 

优化器:基于损失函数,如何对网络更新;

metrics 评价指标;给人客观的数据分析;

5.model.fit   执行训练过程,输入训练集和测试集的输入特征和标签,batch.epoch

6.model.summary   打印网络结构和参数统计

3model=tf.keras.models.Sequential([网络层结构])举例:

拉直层:tf.keras.layers.Flatten()

全连接层:tf.keras.layers.Dense(神经元个数,activation='激活函数',kernel_regularizer=哪种正则化)

activation可选: relu softmax sigmoid tanh

kernel_regularizer可选:tf.keras.regularizers.l1()  tf.keras.regularizers.l2()  l1和l2正则化;

卷积层:tf.keras.layers.Conv2D(filters=卷积核个数,kernel_size='卷积核尺寸',strides=卷积步长,padding=valid or same)

4.model.compile(optimizer=优化器,loss=损失函数,metrics=['准确率']) 

optimizer:字符串形式或函数形式:sgd adagrad adam adadelta 

用函数形式还可以设置参数

loss可选:字符串或函数形式:mse 

tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

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是独热码(概率分布)

标签转换成one-hot形式:train_labels = to_categorical(train_labels)

5model.fit(训练集的输入特征,训练集的标签,batch_size=,epochs=validation data=(测试集的输入特征,测试集的标签):validation_split=从训练集划分多少比例给测试集,validation freq=多少次epoch测试一次,callbacks=[cp_callback])

cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,
                                                 save_weights_only=True,
                                                 save_best_only=True)

6、model.summary() 打印网络结构及参数

自制数据集:解决本领域应用

数据增强:扩充数据集

断点续训:存取模型

参数提取:把参数存入文本

acc/loss可视化:查看训练效果

利用已经有的数据集下载的效果:

mnist = tf.keras.datasets.mnist

下载的格式为:mnist.npz    解压后发现有四个文件x_train.npz, y_train.npz, x_test.npz, y_test.npz

均为<class 'numpy.ndarray'>格式

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值