Advertisement

深度学习21天 —— 卷积神经网络(CNN):识别验证码( 第12天)

阅读量:

目录

一、前期准备

1.1 标签数字化

1.2 加载数据

1.3 配置数据

二、其他

2.1 损失函数 categorical_crossentropy

2.2 plt.legend(loc=' ')

2.3 history.history


活动地址:21天学习挑战赛

学习:深入解析深度学习技术中的关键算法——以卷积神经网络为例进行验证码识别研究

具体来说

具体来说

一、前期准备

1.1 标签数字化

复制代码
 number   = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

    
 alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    
 char_set       = number + alphabet
    
 char_set_len   = len(char_set)
    
 label_name_len = len(all_label_names[0])
    
  
    
  
    
 # 将字符串数字化
    
 def text2vec(text):
    
     vector = np.zeros([label_name_len, char_set_len])
    
     for i, c in enumerate(text):
    
     idx = char_set.index(c)
    
     vector[i][idx] = 1.0
    
     return vector
    
  
    
 all_labels = [text2vec(i) for i in all_label_names]
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-07-13/E2XHWUuksbvhwR6iPydNe5jlMzxL.png)

text 是 all_label_names 表示标签名称的值。假设标签为 677g3,则每次将 text2vec 函数应用于该数值序列:6, 7, 7, g, 3

enumerate函数返回了text中的每个元素及其索引,并将其赋给变量i和c。idx表示字符c在char_set中的位置。我们创建了一个全零二维数组,在该数组中:

  • 行的数量等于标签的数量,
  • 列的数量等于char_set中元素的数量,
    其中每一行对应一个标签名称的位置设置为1,
    其余位置则保持0不变。

1.2 加载数据

复制代码
 AUTOTUNE = tf.data.experimental.AUTOTUNE

    
  
    
 path_ds  = tf.data.Dataset.from_tensor_slices(all_image_paths)
    
 image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=AUTOTUNE)
    
 label_ds = tf.data.Dataset.from_tensor_slices(all_labels)
    
  
    
 image_label_ds = tf.data.Dataset.zip((image_ds, label_ds))
    
 image_label_ds
    
    
    
    
    python

tf.data.Dataset.via tensor slices 方如一的技术分享个人网站()

如同 pre fetch()机制一样,Dataset.map() 同样可以充分地利用多块GPU资源,并实现对数据元素的并行处理过程。以下以MNIST数据集为例说明这一过程:假设用于训练的计算节点配备有双核CPU架构,在每一批次的数据处理过程中均可同时分配两片独立GPU进行运算操作(如上文所述之rot90函数)。我们可以采用以下代码实现这一功能:

复制代码
    1mnist_dataset = mnist_dataset.map(map_func=rot90, num_parallel_calls=2)
    
    
    python

在TensorFlow 2.0版本中,默认提供了一个名为tf.data.experimental.autotune的核心组件,在优化数据处理管道效率方面发挥着关键作用。该组件通过动态规划算法自动识别并配置最优的数据预处理参数设置,在提升模型训练效率的同时实现了资源的最佳利用与分配

该组件特别适用于大规模数据集场景下的训练过程优化,在减少计算资源浪费的前提下显著提升了整体系统性能表现

1.3 配置数据

prefetch() 功能详述:当CPU致力于获取新数据时,加速器当前无任务;另一方面,当加速器投入模型训练,则CPU当前无任务;由此可见,整个训练周期包括预处理阶段所需的时间与模型训练所需的时间之和. prefetch() 使得预处理步骤与模型执行过程得以并行进行.当下运行至第N个训练步骤时,CPU正准备第N+1个步骤的数据.如此一来不仅可以最大限度地缩短单步运行所耗时间(而非总运行时间),而且能够节省从数据提取到转换所需的额外时间.若无采用prefetch机制,则系统中大部分时间仅CPU与GPU/TPU均闲置.

复制代码
 BATCH_SIZE = 16

    
  
    
 train_ds = train_ds.batch(BATCH_SIZE)
    
 train_ds = train_ds.prefetch(buffer_size=AUTOTUNE)
    
  
    
 val_ds = val_ds.batch(BATCH_SIZE)
    
 val_ds = val_ds.prefetch(buffer_size=AUTOTUNE)
    
 val_ds
    
    
    
    
    python

二、其他

2.1 损失函数 categorical_crossentropy

复制代码
 model.compile(optimizer="adam",

    
           loss='categorical_crossentropy',
    
           metrics=['accuracy'])
    
    
    
    
    python

通过公式可以看出,在变量\text{yi}只能取值为0或1的情况下进行分类。如果\text{yi}等于0,则结果必然是0;只有在\text{yi}等于1的情况下才会产生非零的结果。可以看出交叉熵损失函数确实只关注一个类别的情况,并因此通常与Softmax函数结合使用来进行多标签分类任务

该文介绍了损失函数categorical_crossentropy在分类模型中的应用与优化方法,并探讨了其在实际场景中的表现特点及其对模型训练的影响因素分析

2.2 plt.legend(loc=' ')

plt.legend(loc=' '):设置图例的位置

绘图函数主要用于生成线状图表,并通过坐标轴来展示数据变化趋势。散点图绘制函数则用于展示数据点分布情况,并通过坐标位置体现多维数据信息。图形注解功能则负责在图表中标明各个元素来源,并通过标签实现信息对应关系的清晰呈现。

复制代码
 plt.legend(loc='lower right')

    
 plt.legend(loc='upper right')
    
    
    
    
    python

2.3 history.history

复制代码
 plt.plot(history.history['accuracy'])

    
 plt.plot(history.history['val_accuracy'])
    
    
    
    
    python

history:历史查看命令,可用来绘制训练过程中的损失和准确率

全部评论 (0)

还没有任何评论哟~