开云(中国)kaiyun网页版登录入口开云体育layers.Dense(64-开云「中国」kaiyun网页版登录入口

发布日期:2024-10-08 08:38    点击次数:64

开云(中国)kaiyun网页版登录入口开云体育layers.Dense(64-开云「中国」kaiyun网页版登录入口

在广博深度学习框架中,比如PyTorch、TensorFlow、MNN、Caffie等,PyTorch相比吃硬件性能开云(中国)kaiyun网页版登录入口开云体育,尤其在GPU显卡这块辨别度尽头大。

若是念念作念迁徙端识别法子,PyTorch彰着不相宜条目,与硬件性能浓烈挂钩,若是迁徙端硬件建立不成,会酿成用户体验尽头不好。

而无诀别适用于迁徙端的深度学习框架是TensorFlow Lite,就跟Android手机自带的数据库SQLite不异,与硬件建立无关,脱离硬件依赖。

而TensorFlow Lite是由TensorFlow模子调度导出的,本文先容TensorFlow模子在卷积神经聚集鸿沟的诈欺。

一、 TF描摹卷积层

在TensorFlow中,卷积层经常是通过tf.keras.layers.Conv2D来已毕的。底下我将用Python和TensorFlow的形势来描摹怎样界说一个基本的2D卷积层:

1. 导入必要的库

import tensorflow as tf

from tensorflow.keras import layers

2. 界说卷积层

# 创建一个卷积层实例

conv_layer = layers.Conv2D(

filters=32, # 输出的维度(即滤波器的数目)

kernel_size=(3, 3), # 滤波器的大小

strides=(1, 1), # 步长

padding='valid', # 填充形势:'valid'示意莫得填充,'same'示意输出与输入同尺寸

activation='relu', # 激活函数

input_shape=(28, 28, 1) # 输入局势,举例关于MNIST数据集

3. 使用卷积层

假定咱们有一个输入张量input_tensor,咱们不错这么诈欺上头界说的卷积层:

# 假定输入张量

input_tensor = tf.random.normal([1, 28, 28, 1]) # 批次大小为1,灰度图像

# 诈欺卷积层

output_tensor = conv_layer(input_tensor)

print(output_tensor.shape)

这段代码界说了一个简短的2D卷积层,并将其诈欺于一个局势为(1, 28, 28, 1)的输入张量上,输出将是经过卷积操作后的成果。

二、TF描摹批圭臬化

在TensorFlow中,批圭臬化(Batch Normalization)是一种常用的正则化时候,用于加快正经进程并熏陶模子性能。它通过对每个小批量的数据进行归一化责罚,使得聚集的中间输出具有零均值和单元方差。这有助于缓解梯度消失或爆炸的问题,而况使聚集愈加自由。

1. 界说批圭臬化层

# 创建一个批圭臬化层实例

batch_norm_layer = layers.BatchNormalization(

axis=-1, # 要归一化的轴,默许为-1(临了一个轴)

momentum=0.99, # 动量值,用于设想迁徙平均值

epsilon=0.001, # 防护除以零的小常数

center=True, # 是否使用偏移项(β)

scale=True # 是否使用缩放项(γ)

2. 在模子中使用批圭臬化

经常情况下,批圭臬化层会与其他层系数组合成一个模子。举例,在卷积神经聚集合:

model = tf.keras.Sequential([

layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),

layers.BatchNormalization(),

layers.MaxPooling2D((2, 2)),

layers.Flatten(),

layers.Dense(64, activation='relu'),

layers.BatchNormalization(),

layers.Dense(10, activation='softmax')

])

# 编译模子

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

# 稽查模子结构

model.summary()

在这个例子中,咱们在卷积层和全连气儿层之后分别添加了批圭臬化层,以熏陶模子的自由性和性能。

三、 TF描摹池化

在TensorFlow中,池化(Pooling)是一种常用的下采样时候,用于减少特征图的空间尺寸,从而裁汰设想复杂度并熏陶模子的鲁棒性。常见的池化措施包括最大池化(Max Pooling)和平均池化(Average Pooling)。

1. 界说池化层

最大池化(Max Pooling)

# 创建一个最大池化层实例

max_pool_layer = layers.MaxPooling2D(

pool_size=(2, 2), # 池化窗口的大小

strides=(2, 2), # 步长

padding='valid' # 填充形势:'valid'示意莫得填充,'same'示意输出与输入同尺寸

平均池化(Average Pooling)

# 创建一个平均池化层实例

avg_pool_layer = layers.AveragePooling2D(

pool_size=(2, 2), # 池化窗口的大小

strides=(2, 2), # 步长

padding='valid' # 填充形势:'valid'示意莫得填充,'same'示意输出与输入同尺寸

2. 在模子中使用池化层

经常情况下,池化层会与其他层系数组合成一个模子。举例,在卷积神经聚集合:

model = tf.keras.Sequential([

layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),

layers.MaxPooling2D((2, 2)), # 最大池化层

layers.Conv2D(64, (3, 3), activation='relu'),

layers.AveragePooling2D((2, 2)), # 平均池化层

layers.Flatten(),

layers.Dense(64, activation='relu'),

layers.Dense(10, activation='softmax')

])

# 编译模子

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

# 稽查模子结构

model.summary()

在这个例子中,咱们在卷积层之后分别添加了最大池化层和平均池化层,以减少特征图的空间尺寸并熏陶模子的鲁棒性。

四、 TF描摹断念

在TensorFlow中,断念(Dropout)是一种常用的正则化时候,用于防护过拟合。通过在正经进程中立时丢弃一部分心经元的输出,Dropout 不错增强模子的泛化智商。底下细心先容如安在TensorFlow中使用 Dropout 层。

1. 界说 Dropout 层

# 创建一个 Dropout 层实例

dropout_layer = layers.Dropout(rate=0.5) # rate 示意丢弃的概率

2. 在模子中使用 Dropout 层

经常情况下,Dropout 层会与其他层系数组合成一个模子。举例,在卷积神经聚集合:

model = tf.keras.Sequential([

layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),

layers.MaxPooling2D((2, 2)),

layers.Dropout(0.5), # Dropout 层

layers.Conv2D(64, (3, 3), activation='relu'),

layers.MaxPooling2D((2, 2)),

layers.Flatten(),

layers.Dense(64, activation='relu'),

layers.Dropout(0.5), # Dropout 层

layers.Dense(10, activation='softmax')

])

# 编译模子

model.compile(optimizer='adam',

loss='sparse_categorical_crossentropy',

metrics=['accuracy'])

# 稽查模子结构

model.summary()

在这个例子中,咱们在卷积层和全连气儿层之后分别添加了 Dropout 层,以熏陶模子的泛化智商和防护过拟合。

五、 实质案例

通过引入cifar10数据集,加载数据集,引入卷积神经聚集完成模子正经,竣工代码如下:

竣工代码:

import tensorflow as tf

import os

import numpy as np

from matplotlib import pyplot as plt

from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, MaxPool2D, Dropout, Flatten, Dense

from tensorflow.keras import Model

np.set_printoptions(threshold=np.inf)

cifar10 = tf.keras.datasets.cifar10

(x_train, y_train), (x_test, y_test) = cifar10.load_data()

x_train, x_test = x_train / 255.0, x_test / 255.0

cvpath= 'E:/代码Git/pythonProject1/chapter08'

class Baseline(Model):

def __init__(self):

super(Baseline, self).__init__()

self.c1 = Conv2D(filters=6, kernel_size=(5, 5), padding='same')

self.b1 = BatchNormalization()

self.a1 = Activation('relu')

self.p1 = MaxPool2D(pool_size=(2,2), strides=2, padding='same')

self.d1 = Dropout(0.2)

self.flatten = Flatten()

self.f1 = Dense(128, activation='relu')

self.d2 = Dropout(0.2)

self.f2 = Dense(10, activation='softmax')

def call(self, x):

x = self.c1(x)

x = self.b1(x)

x = self.a1(x)

x = self.p1(x)

x = self.d1(x)

x = self.flatten(x)

x = self.f1(x)

x = self.d2(x)

y = self.f2(x)

return y

model = Baseline()

model.compile(optimizer='adam',

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

metrics=['sparse_categorical_accuracy'])

checkpoint_save_path = cvpath+'/checkpoint/Baseline.ckpt'

if os.path.exists(checkpoint_save_path+'.index'):

print('---------load the model--------------')

model.load_weights(checkpoint_save_path)

cp_callback = tf.keras.callbacks.ModelCheckpoint(filepath=checkpoint_save_path,

save_weights_only=True,

save_best_only=True)

history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1,

callbacks=[cp_callback])

model.summary()

file=open(cvpath+'/weights.txt','w')

for v in model.trainable_variables:

file.write(str(v.name)+'\t')

file.write(str(v.shape)+'\n')

file.write(str(v.numpy())+'\n')

file.close()

############################ close ###################################################

acc = history.history['sparse_categorical_accuracy']

val_acc = history.history['val_sparse_categorical_accuracy']

loss = history.history['loss']

val_loss = history.history['val_loss']

plt.subplot(1,2,1)

plt.plot(acc, label='Training Accuracy')

plt.plot(val_acc, label='Validation Accuracy')

plt.title('Training And Validation Accuracy')

plt.legend()

plt.subplot(1,2,2)

plt.plot(loss, label='Training Loss')

plt.plot(val_loss, label='Validation Loss')

plt.title('Training and Validation Loss')

plt.legend()

plt.show()

右键开动法子:

领先下载cifar10数据集,下载进程略

罗致断点续存,渐渐保存正经进程,稽查成果:

中间若是报出文献夹不存在,需要创建对应文献夹和文献。

更多大模子深度学习内容接待眷注博主开云(中国)kaiyun网页版登录入口开云体育,握续更新。

lossConv2D模子layersmodel发布于:湖北省声明:该文不雅点仅代表作家本东谈主,搜狐号系信息发布平台,搜狐仅提供信息存储空间就业。

上一篇:开云体育(中国)官方网站”此时在饮食上应缓慢补充水分-开云「中国」kaiyun网页版登录入口
下一篇:开yun体育网从而灵验展现出干练和立体的轮廓感-开云「中国」kaiyun网页版登录入口