96SEO 2026-02-19 11:58 0
#pathlib提供了一个面向对象的接口来处理文件系统路径。

路径被表示为Path对象可以调用方法来进行各种文件和目录操作。
#keras作为高层神经网络API已被集成进tensorflow使得训练更方便简单
#layers提供了神经网络的基本构建块比如全连接层、卷积层、池化层等
#提供了构建和训练神经网络模型的功能包括顺序模型Sequential和函数式模型Functional
#导入两个重要的回调函数前者用于训练期间保存模型最佳版本后者监测到模型性能不再提升时提前停止训练避免过拟合
EarlyStoppingtf.__version__2.17.0由于本人没有GPU了该部分跳过↓
tf.config.list_physical_devices(GPU)#
内存增长策略。
开启这个选项可以让tf按需分配gpu内存而不是一次性分配所有可用内存。
tf.config.experimental.set_memory_growth(gpu0,
True)#设置tf只使用指定的gpu(gpu[0])tf.config.set_visible_devices([gpu0],GPU)gpus2.导入数据
(list(data_dir.glob(*/*.png)))print(图片总数,
list(data_dir.glob(Green/*.png))
imagePIL.Image.open(str(ex[8]))
224关于image_dataset_from_directory()的详细介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/117018789tr_ds
tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,#指定数据集中分割出多少比例数据当作验证集0.1表示10%数据会被用来当验证集subsettraining,#指定是用于训练还是验证的数据子集这里设定为trainingseed123,#用于设置随机数种子以确保数据集划分的可重复性和一致性image_size(img_height,
img_width),batch_sizebatch_size)Found
tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split
123,image_size(img_height,img_width),batch_sizebatch_size
可以通过class_names输出数据集的标签。
标签将按字母顺序对应于目录名称
#数据增强---参考博客https://blog.csdn.net/afive54/article/details/135004174#
tf.image.random_flip_up_down(image)
tf.image.random_flip_left_right(image)
tf.image.random_contrast(image,
tf.image.random_brightness(image,
tf.image.random_saturation(image,
tf.random.normal(tf.shape(image),
1)plt.imshow(images[i].numpy().astype(uint8))plt.title(class_names[labels[i]])plt.axis(off)
tr_ds:print(image_batch.shape)print(labels_batch.shape)break#(32,
#自动调整并行度自动决定并行处理数据的最佳线程数以最大化数据吞吐量。
#减少等待时间通过优化数据加载和预处理减少模型训练时等待数据的时间。
#简化代码不需要手动调整参数代码更简洁且易于维护。
#使用cache()方法将训练集缓存到内存中这样加快数据加载速度
#当多次迭代训练数据时可以重复使用已经加载到内存的数据而不必重新从磁盘加载
#使用shuffle()对训练数据集进行洗牌操作打乱数据集中的样本顺序
#prefetch()预取数据节约在训练过程中数据加载时间tr_ds
tr_ds.cache().shuffle(1000).prefetch(buffer_sizeAUTOTUNE)
val_ds.cache().prefetch(buffer_sizeAUTOTUNE)normalization_layer
创新VGGNet的创新在于采用了相对简单的卷积层堆叠的结构其中使用了多个小卷积核(3*3)来替代较大的卷积核。
这种结构使网络更深同时参数共享更多有助于提取丰富的特征。
优点相对简单而易于理解的网络结构。
良好的性能在图像分类任务中得到了验证。
网络结构可提取更丰富的特征信息缺点参数量较大网络结构比较深需要消耗大量计算资源和时间来训练。
网络结构比较复杂容易出现梯度消失或爆炸等问题相对于一些后续的模型不够高效。
paddingsame,nameblock1_conv1)(input_tensor)x
paddingsame,nameblock1_conv2)(x)x
paddingsame,nameblock2_conv1)(x)x
paddingsame,nameblock2_conv2)(x)x
paddingsame,nameblock3_conv1)(x)x
paddingsame,nameblock3_conv2)(x)x
paddingsame,nameblock3_conv3)(x)x
paddingsame,nameblock4_conv1)(x)x
paddingsame,nameblock4_conv2)(x)x
paddingsame,nameblock4_conv3)(x)x
paddingsame,nameblock5_conv1)(x)x
paddingsame,nameblock5_conv2)(x)x
paddingsame,nameblock5_conv3)(x)x
functional┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
├──────────────────────────────────────┼─────────────────────────────┼─────────────────┤
└──────────────────────────────────────┴─────────────────────────────┴─────────────────┘Total
#调用-去除顶层自定义全连接层加imagenet权重参数冻结conv,加BN和dropout
VGG16(weightsimagenet,include_topFalse,input_shape(img_height,
Trueprint(layer)else:set_trainable
print(base_model.summary(),end\n)#
models.Sequential([base_model,#layers.GlobalAveragePooling2D(),#layers.GlobalMaxPooling2D(),layers.Flatten(),layers.Dense(1024,
activationrelu),layers.BatchNormalization(),layers.Dropout(0.4),layers.Dense(128,
relu),layers.BatchNormalization(),layers.Dropout(0.4),layers.Dense(len(class_names),
model.load_weights(/content/drive/Othercomputers/My
notebook/xunlianying/vgg16_1_final.weights.h5)四、编译模型
在准备对模型进行训练之前还需要再对其进行一些设置。
以下内容是在模型的编译步骤中添加的
损失函数loss用于衡量模型在训练期间的准确率。
优化器optimizer决定模型如何根据其看到的数据和自身的损失函数进行更新。
指标metrics用于监控训练和测试步骤。
以下示例使用了准确率即被正确分类的图像的比率。
tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate,decay_steps30,decay_rate0.92,staircaseTrue)#
tf.keras.optimizers.Adam(learning_ratelr_schedule)model.compile(optimizeroptimizer,losstf.keras.losses.SparseCategoricalCrossentropy(from_logitsFalse),metrics[accuracy])#Adam优化器是一种常用的梯度下降优化算法用于更新模型的权重以最小化训练过程中的损失函数
ModelCheckpoint(/content/drive/My
notebook/xunlianying/T7_shou1.weights.h5,monitorval_accuracy,verbose1,mode
max,save_best_onlyTrue,save_weights_onlyTrue)#
EarlyStopping(monitorval_accuracy,min_delta0.0001,patience5,mode
model.fit(tr_ds,validation_dataval_ds,epochsepochs,callbacks[checkpointer,
history.history[val_accuracy]loss
history.history[val_loss]epochs_range
range(epochs)plt.figure(figsize(12,
model.load_weights(/content/drive/My
notebook/xunlianying/T7_shou1.weights.h5)
Image.open(/content/drive/MyDrive/Colab
print(预测结果为,class_names[np.argmax(predictions)])
由于没有GPU算力嘞cpu跑得一天。
。
。
慢慢来吧最近也好忙慢慢学抽空去补点基础知识了。
。
。
后续模型调整再跑什么的感觉得好久了。
。
。
每次调整优化其实也很耗时
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback