tensorflow CNN模型训练+优化参数+实战

article/2025/10/29 18:20:39

训练线性函数
在这里插入图片描述

import numpy as np
import tensorflow.keras as keras
# 构建模型
model = keras.Sequential([keras.layers.Dense(units=1,input_shape=[1])])
# optimizer优化,loss损失
model.compile(optimizer='sgd', loss='mean_squared_error')
#准备训练数据
xs=np.array([-1.0,0,1,2,3,4],dtype=float)
ys=np.array([-3,-1,1,3,5,7],dtype=float)
#训练模型,epochs是训练次数
model.fit(xs,ys,epochs=500)
#使用模型,用模型去检测10
print(model.predict([10.0]))

计算机视觉
在这里插入图片描述

import tensorflow as tf
from tensorflow import keras
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()#构造神经元模型,是全连接网络
#输入是28*28,最后一层需要分10类,中间有128个神经元,激活函数是relu
#最后一层是输出层
model=keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))model.summary()
#图片是784个像素,128层神经元,+1是每一层都有一个bias,100480个param
(784+1)*128
#输出层是10个神经元,输出是(128+1)*10

在这里插入图片描述

import tensorflow as tf
import numpy as np
from tensorflow import keras
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()#构造神经元模型
#输入是28*28,最后一层需要分10类,中间有128个神经元,激活函数是relu
#最后一层是输出层
model=keras.Sequential()
model.add(keras.layers.Flatten(input_shape=(28,28)))
model.add(keras.layers.Dense(128,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))#model.summary()
#图片是784个像素,128层神经元,+1是每一层都有一个bias,100480个param
(784+1)*128
#输出层是10个神经元,输出是(128+1)*10#让他变成0-1之间的数,准确率会更高
train_images=train_images/255
#指定优化的方法,
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])
#用训练数据集训练
model.fit(train_images,train_labels,epochs=5)test_images_scale=test_images/255
#评估模型效果
model.evaluate(test_images_scale,test_labels)#用模型判断单张图片的方法
print(np.argmax(model.predict([[test_images[0]/255]])))
print(test_labels[0])

自动终止训练
用到的是callback,每次训练以后都会使用callback,例子是loss小于0.4终止
步骤就是定义类,生成实例

import tensorflow as tf
import numpy as np
from tensorflow import keras
#定义callback,也就是loss小于0.4的时候终止
class myCallback(tf.keras.callbacks.Callback):def on_epoch_end(self,epoch,logs={}):if(logs.get('loss')<0.4):print('\nLoss is low so cancelling training!')self.model.stop_training=True#调用实例
callbacks=myCallback()
fashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
train_images_scaled=train_images/255.0
test_labels_scaled=test_labels/255.0
model=keras.Sequential()
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512,activation=tf.nn.relu))
model.add(keras.layers.Dense(10,activation=tf.nn.softmax))
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])
model.fit(train_images_scaled,train_labels,epochs=5,callbacks=[callbacks])

卷积神经网络结合
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
max pooling是为了增加区域特征
在这里插入图片描述

卷积神经网络的程序

import tensorflow as tf
import numpy as np
from tensorflow import kerasfashion_mnist = keras.datasets.fashion_mnist
(train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data()
train_images_scaled=train_images/255.0
test_labels_scaled=test_labels/255.0model=tf.keras.models.Sequential([#卷积层,过滤器有64个,每个过滤器是3*3个像素,输入图片灰度值tf.keras.layers.Conv2D(64,(3,3),activation='relu',input_shape=(28,28,1)),#卷积之后增强特征,原来的输出会小一半tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Conv2D(64,(3,3),activation='relu'),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(128,activation='relu'),tf.keras.layers.Dense(10,activation='softmax')
])
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])
#如果有维度问题可以加reshape
model.fit(train_images_scaled.reshape(-1,28,28,1),train_labels,epochs=5)

可以用model.summary()来查看神经网络的结构
在这里插入图片描述
图片原尺寸是2828,经过33的过滤器变成了2626,一张图片变成了64张,maxpooling将照片剪成1/4,后面同理
param (3
3+1)*64=640

#查看网络结构
layer_outputs=[layer.output for layer in model.layers]
activation_model=tf.keras.models.Model(inputs=model.input,outputs=layer_outputs)
pred=activation_model.predict(test_images[0].reshape(1,28,28,1))
#可以查看过滤器之后的小图片
plt.imshow(pred[0][0,:,:,2])

项目实战
准备训练数据,构建模型,训练模型,优化参数
数据结构
在这里插入图片描述
真实数据的特点
图片尺寸大小不一,需要裁剪成一样大小
数据量比较大,不能一下子装入内存
经常需要修改数据

加载数据

from tensorflow.keras.preprocessing.image import ImageDataGenerator
#创建两个数据生成器,指定scaling范围0-1
train_datagen=ImageDataGenerator(rescale=1/255)
validation_datagen=ImageDataGenerator(rescale=1/255)#指向训练数据文件夹
train_generator=train_datagen.flow_from_directory('E:/tf神经网络练习/horse-or-human/',#训练数据所在文件夹target_size=(300,300),  #指定输出尺寸batch_size=32,class_mode='binary' #指定二分类)#指向测试数据文件夹
validation_generator=validation_datagen.flow_from_directory('E:/tf神经网络练习/validation-horse-or-human',#训练数据所在文件夹target_size=(300,300),  #指定输出尺寸batch_size=32,class_mode='binary' #指定二分类)

模型及训练

model=tf.keras.models.Sequential([tf.keras.layers.Conv2D(16, (3, 3), activation='relu',input_shape=(150, 150, 3)),# 卷积之后增强特征,原来的输出会小一半tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(32, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512, activation='relu'),tf.keras.layers.Dense(1, activation='sigmoid')
])model.compile(loss="binary_crossentropy",optimizer="adam",metrics=['acc'])history=model.fit(train_generator,epochs=15,verbose=1,validation_data=validation_generator,validation_steps=8)

对模型的各种参数进行优化

from kerastunter.engine.hyperparameters import Hyperpaeameters
hp=hyperpaeameters()
def build_model(hp):model=tf.keras.models.Sequential()#调整过滤器函数model.add(tf.keras.layers.Conv2D(hp.Choice('num_filters_layer0',values=[16,64],default=16), (3, 3), activation='relu',input_shape=(150, 150, 3)))model.add(tf.keras.layers.MaxPooling2D(2, 2))for i in range(hp.Int("num_conv_layers",1,3)):model.add(tf.keras.layers.Conv2D(hp.Choice(f'num_filters_layer{i}',values=[16,64],default=16),  (3, 3), activation='relu'))model.add(tf.keras.layers.MaxPooling2D(2, 2))model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))model.add(tf.keras.layers.MaxPooling2D(2, 2))model.add(tf.keras.layers.Flatten())#调整神经元model.add(tf.keras.layers.Dense(hp.Int("hidden_units",128,512,step=32), activation='relu'))model.add(tf.keras.layers.Dense(1, activation='sigmoid'))model.compile(model.compile(loss="binary_crossentropy",optimizer="adam",metrics=['acc']))return model
tuner=Hyperband(build_model,objective='val_acc',max_epochs=15,diretory='horse_human_params',hyperparameters=hp,project_name='my_hourse_human_project'
)
#查看调参过程
tuner.search(train_generator,epochs=10,validation_data=validation_generator)best_hps=tuner.get_best_hyperparametera(1)[0]
print(best_hps.values)
#获取最好参数把模型构建出来
model=tuner.hypermodel.build(best_hps)
model.summary()

http://chatgpt.dhexx.cn/article/i5s8vK2X.shtml

相关文章

nanodet训练手势识别模型

序言 前段时间nanodet爆火&#xff0c;以非常小的模型和运算量&#xff0c;取得了超过tiny-yolov4的精度&#xff0c;非常惊艳&#xff0c;因为时间问题一直没有尝试&#xff0c;最近有空决定尝试一下。先来看下作者给的模型效果 一、nanodet安装 首先安装nanodet的环境包…

Pytorch教程[10]完整模型训练套路

一般的模型构建都是按照下图这样的流程 下面分享一个自己手动搭建的网络 from model import * import torchvision import torch from torch.utils.tensorboard import SummaryWriter from torchvision import transforms from torch import nn from torch.utils.data import …

PaddleOCR学习(二)PaddleOCR检测模型训练

这一部分主要介绍&#xff0c;如何使用自己的数据库去训练PaddleOCR的文本检测模型。 官方教程https://github.com/PaddlePaddle/PaddleOCR/blob/develop/doc/doc_ch/detection.md 一、准备训练数据 首先你需要有自己的数据&#xff0c;如果没有自己的数据&#xff0c;推荐使…

迁移学习的模型训练

用深度学习解决目标检测有两个重要工作&#xff1a; 1、设计、实现、训练和验证模型 模型如果设计模型如何编程实现如何收集足够的数据来训练并验证模型是否符合预期 从头开始设计、实现、训练和验证模型是需要有众多深度学习算法人才做支撑&#xff0c;并且极其耗时耗力 2、…

TF2.0模型训练

TF2.0模型训练 概述数据集介绍1、通过fit方法训练模型准备数据创建模型编译模型训练模型 2、通过fit_generator方法训练模型构建生成器创建模型编译模型训练模型 3、自定义训练准备数据创建模型定义损失函数及优化器训练模型 下一篇TF2.0模型保存 概述 这是TF2.0入门笔记【TF2…

TensorFlow 2.0 —— 模型训练

目录 1、Keras版本模型训练1.1 构造模型&#xff08;顺序模型、函数式模型、子类模型&#xff09;1.2 模型训练&#xff1a;model.fit()1.3 模型验证&#xff1a;model.evaluate()1.4 模型预测&#xff1a;model.predict()1.5 使用样本加权和类别加权1.6 回调函数1.6.1 EarlySt…

如何在jupyter上运行Java代码(适用LINUX)

如何在jupyter上运行Java代码 1.下载必须软件 下载JDK且JDK版本必须 ≥ 9 ≥9 ≥9从github上下载ijava 附 &#xff1a; ijava下载链接.装有jupyter&#xff0c;我在LINUX上是直接装的anaconda 安装过程 将下载的ijava压缩包解压出来&#xff0c;并在此路径用该命令 : sudo…

Java单元测试介绍

文章目录 单元测试单元测试基本介绍单元测试快速入门单元测试常用注解 单元测试 单元测试基本介绍 单元测试: 单元测试就是针对最小的功能单元编写测试代码&#xff0c;Java程序最小的功能单元是方法&#xff0c;因此&#xff0c;单元测试就是针对Java方法的测试&#xff0c;…

Jupyter 配置 Java环境,写Java代码,测试成功

本次简单诉说下怎么通过jupyter安装iJava&#xff0c;写Java代码。 安装Java的不说了 我使用的是Java15 然后去&#xff1a;https://github.com/SpencerPark/IJava/releases 下载zip&#xff0c;不要下载其他的 得到就是一个py文件 下面就是一个 python install.py 我这里就…

java调用python执行脚本,附代码

最近有个功能需要java调用python脚本实现一些功能&#xff0c;前期需要做好的准备&#xff1a;配置好python环境&#xff0c;如下&#xff1a; 以下展示的为两种&#xff0c;一种为生成图片&#xff0c;另一种为生成字符串。 package com.msdw.tms.common.utils.py;import ja…

Selenium Java自动化测试环境搭建

IDE用的是Eclipse。 步骤1&#xff1a;因为是基于Java&#xff0c;所以首先要下载与安装JDK&#xff08;Java Development Kit&#xff09; 下载&#xff1a; 点击这里下载JDK 安装&#xff1a;按照默认安装一路点next就可以了。 验证&#xff1a;安装完成后&#xff0c;在命…

java单元测试(Junit)

相关代码下载链接&#xff1a; http://download.csdn.net/detail/stevenhu_223/4884357 在有些时候&#xff0c;我们需要对我们自己编写的代码进行单元测试&#xff08;好处是&#xff0c;减少后期维护的精力和费用&#xff09;&#xff0c;这是一些最基本的模块测试。当然&…

Java单元测试工具:JUnit4(一)——概述及简单例子

&#xff08;一&#xff09;JUnit概述及一个简单例子 看了慕课网的JUnit视频教程&#xff1a; http://www.imooc.com/learn/356&#xff0c;总结笔记。 这篇笔记记录JUnit的概述&#xff0c;以及一个快速入门的例子。 1.概述 1.1 什么是JUnit ①JUnit是用于编写可复用测试集的…

Linux下执行Python脚本

1.Linux Python环境 Linux系统一般集成Python&#xff0c;如果没有安装&#xff0c;可以手动安装&#xff0c;联网状态下可直接安装。Fedora下使用yum install&#xff0c;Ubuntu下使用apt-get install&#xff0c;前提都是root权限。安装完毕&#xff0c;可将Python加入环境变…

python pytest脚本执行工具

pytest脚本执行工具 支持获取当前路径下所有.py脚本 添加多个脚本&#xff0c;一起执行 import tkinter as tk from tkinter import filedialog import subprocess import os from datetime import datetimedef select_script():script_path filedialog.askopenfilename(fil…

linux上运行python(简单版)

linux上运行python&#xff08;简单版&#xff09; 一、前提准备1.centOS72.挂载yum源[http://t.csdn.cn/Isf0i](http://t.csdn.cn/Isf0i) 二、安装python3三、运行程序 一、前提准备 1.centOS7 2.挂载yum源http://t.csdn.cn/Isf0i 在终端进行安装python3 二、安装python3 …

linux怎么运行python脚本?

linux运行python脚本的方法&#xff1a; 1、命令行执行&#xff1a; 建立一个test.py文档&#xff0c;在其中书写python代码。之后&#xff0c;在命令行执行&#xff1a;python test.py 说明&#xff1a;其中python可以写成python的绝对路径。使用which python进行查询。 注…

java实现远程执行Linux下的shell脚本

java实现远程执行Linux下的shell脚本 背景导入Jar包第一步&#xff1a;远程连接第二步&#xff1a;开启Session第三步&#xff1a;新建测试脚本文件结果报错 背景 最近有个项目&#xff0c;需要在Linux下的服务器内写了一部分Python脚本&#xff0c;业务处理却是在Java内&…

Java运行Python脚本

前段时间遇到了在JavaWeb项目中嵌入运行Python脚本的功能的需求。想到的方案有两种&#xff0c;一种是使用Java技术&#xff08;Jython或Runtime.exec&#xff09;运行Python脚本&#xff0c;另一种是搭建一个Python工程对外提供相应http或webservice接口。两种方案我都有实现&…

Java项目分层

MVC模式 在实际的开发中有一种项目的程序组织架构方案叫做MVC模式&#xff0c;按照程序 的功能将他们分成三个层&#xff0c;如下图&#xff1a;Modle层&#xff08;模型层&#xff09;、View层&#xff08;显示层&#xff09;、Controller层&#xff08;控制层&#xff09;。…