17一起做网站app,wordpress音乐页面,软件商店安装最新版下载,网站学习流程文章目录 1、环境安装搭建2、神经网络2.1、解决线性问题2.2、FAshion MNIST数据集使用 3、卷积神经网络3.1、卷积神经网络使用3.2、ImageDataGenerator使用3.3、猫狗识别案例3.4、参数优化 1、环境安装搭建
链接: Windows 安装Tensorflow2.1、Pycharm开发环境
2、神经网络
1… 文章目录 1、环境安装搭建2、神经网络2.1、解决线性问题2.2、FAshion MNIST数据集使用 3、卷积神经网络3.1、卷积神经网络使用3.2、ImageDataGenerator使用3.3、猫狗识别案例3.4、参数优化 1、环境安装搭建
链接: Windows 安装Tensorflow2.1、Pycharm开发环境
2、神经网络
1、传统方式解决问题 2、机器学习解决方式
2.1、解决线性问题 下面通过两组数据推导出公式 -1.0, 0.0, 1.0, 2.0, 3.0, 4.0 -3.0, -1.0, 1.0, 3.0, 5.0, 7.0 很明显是一个线性问题y2x-1下面我们通过tensorflow来解决这个问题输入当x10的时候求y的值 import tensorflow as tf
from tensorflow import keras
import numpy as npdef tensor_test1():# layers表示的是一层神经元units表示这一层里面只有一个。input_shape输入值model keras.Sequential([keras.layers.Dense(units1, input_shape[1])])# 指定优化和损失函数model.compile(optimizersgd, lossmean_squared_error)xs np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtypefloat)ys np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtypefloat)# epochs 表示训练次数model.fit(xs, ys, epochs500)# y 2x-1# 通过模型去检测x10的时候y等于多少print(model.predict([10.0]))if __name__ __main__:tensor_test1() 通过结果可以看出是一个很接近的值 2.2、FAshion MNIST数据集使用 700000张图片 10个类别 28*28 训练神经元网络 通过tensorflow进行模型构建通过构建出来的模型对图片进行识别 import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt# 使用fashion数据集
# 自动终止
# 深度学习是不是训练的次数越多越好呢不是次数太多会出现一些过拟合问题就是做的题目都认识但是新题目不会
# 所以我们需要通过callback来对他进行终止
class myCallbcak(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 Truedef tensor_Fashion():callbacks myCallbcak()fashion_mnist keras.datasets.fashion_mnist# 训练数据集每张图片对应的标签 测试用的图片 测试用的标签(train_images, train_labels), (test_images, test_labels) fashion_mnist.load_data()# print(train_images.shape)# plt.imshow(train_images[0])# 构造模型# 构造一个三层结构第一层用来接收输入中间层有512个神经元这个是任意的最后层我们要分的类别有10model keras.Sequential([keras.layers.Flatten(input_shape(28, 28)),keras.layers.Dense(512, activationtf.nn.relu),keras.layers.Dense(10, activationtf.nn.softmax)])model.summary()# 归一化更准确train_images_scaled train_images / 255.0# 指定优化model.compile(optimizeradam, losstf.losses.sparse_categorical_crossentropy, metrics[accuracy])model.fit(train_images_scaled, train_labels, epochs100, callbacks[callbacks])test_images_scaled test_images / 255.0model.evaluate(test_images_scaled, test_labels)# 判断单张图片的属于哪个类别print(model.predict([[test_images[0] / 255]]))# 打印出标签print(np.argmax(model.predict([[test_images[0] / 255]])))print(test_labels[0])3、卷积神经网络
3.1、卷积神经网络使用 通过卷积神经网络对FAshion MNIST数据集进行训练得出的准确率比神经网络的更准确当时也更耗时 import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as pltdef convolution_nerve():fashion_mnist keras.datasets.fashion_mnist(train_images, train_labels), (test_images, test_labels) fashion_mnist.load_data()# 构造模型model keras.Sequential([keras.layers.Conv2D(64, (3, 3), activationrelu, input_shape(28, 28, 1)),keras.layers.MaxPooling2D(2, 2),keras.layers.Conv2D(64, (3, 3), activationrelu),keras.layers.MaxPooling2D(2, 2),keras.layers.Flatten(),keras.layers.Dense(128, activationrelu),keras.layers.Dense(10, activationsoftmax)])model.summary()# 归一化train_images_scaled train_images / 255.0# 指定优化model.compile(optimizeradam, losstf.losses.sparse_categorical_crossentropy, metrics[accuracy])model.fit(train_images_scaled.reshape(-1, 28, 28, 1), train_labels, epochs5)if __name__ __main__:convolution_nerve()模型结构 1层卷积层 输入是2828过滤器是33最后会去掉两个像素所以是262664是过滤器经过第一次卷积就变成64张图片了(331)64640 2池化层 尺寸减少原来的1/4长宽各自减去一半 2层卷积层 (33*641)*6436928 第一层卷积层 max pooling
3.2、ImageDataGenerator使用 1、 真实数据做处理 2、图片尺寸大小不一需要裁成一样大小 3、数据量比较大不能一下载装入内容 4、经常需要修改参数列入尺寸 使用ImageDataGenerator对图片做处理 from tensorflow.keras.preprocessing.image import ImageDataGenerator# 创建两个数据生成器指定scaling否为0-1
train_datagen ImageDataGenerator(rescale1 / 255)
validation_datagen ImageDataGenerator(rescale1 / 255)# 指向训练数据文件夹
train_genrator train_datagen.flow_from_directory(/, # 训练数据所在文件夹target_size(300, 300), # 指定输出尺寸batch_size32, # 每次提取多少class_modebinary # 指定二分类
)validation_genrator validation_datagen.flow_from_directory(/, # 训练数据所在文件夹target_size(300, 300), # 指定输出尺寸batch_size32, # 每次提取多少class_modebinary # 指定二分类
)3.3、猫狗识别案例 图片资源下载https://download.csdn.net/download/weixin_45715405/88226536 from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import os
import tensorflow as tf
from tensorflow import keras
import numpy as np
def dogs_cats():base_dir E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogstrain_dir os.path.join(base_dir, train)validation_dir os.path.join(base_dir, validation)# 训练集train_cats_dir os.path.join(train_dir, cats)train_dogs_dir os.path.join(train_dir, dogs)# 验证集validation_cats_dir os.path.join(validation_dir, cats)validation_dogs_dir os.path.join(validation_dir, dogs)model tf.keras.models.Sequential([tf.keras.layers.Conv2D(16, (3, 3), activationrelu, input_shape(64, 64, 3)),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(32, (3, 3), activationrelu),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Conv2D(64, (3, 3), activationrelu),tf.keras.layers.MaxPooling2D(2, 2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512, activationrelu),tf.keras.layers.Dense(1, activationsigmoid) # 如果是多分类用softmax2分类用sigmoid就可以了])# 设置损失函数,优化函数model.compile(lossbinary_crossentropy, optimizerRMSprop(0.001), metrics[acc])# 数据预处理# 都进来的数据会被自动转换成tensorfloat32格式分别准备训练和验证# 图像数据归一化0-1区间train_datagen ImageDataGenerator(rescale1. / 255,rotation_range40,width_shift_range0.2,height_shift_range0.2,shear_range0.2,zoom_range0.2,horizontal_flipTrue,fill_modenearest)test_datagen ImageDataGenerator(rescale1. / 255)train_generator train_datagen.flow_from_directory(train_dir, # 文件夹路径target_size(64, 64), # 指定resize的大小batch_size20,# 如果one-hot就是categorical二分类用binary就可以class_modebinary)validation_generator test_datagen.flow_from_directory(validation_dir,target_size(64, 64),batch_size20,class_modebinary)# 训练网络模型# 直接fit也可以但是通常不能把所有数据全部放入内存fit_generator相当于一个生成器动态产生所需的batch数据# steps_per_epoch相当给定一个停止条件因为生成器会不断产生batch数据说白了就是它不知道一个epoch里需要执行多少个stephistory model.fit_generator(train_generator,steps_per_epoch100,epochs5,validation_datavalidation_generator,validation_steps50,verbose2)
3.4、参数优化
安装 pip3 install keras-tuner 优化之后的参数版本 from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import os
from kerastuner.tuners import Hyperband
from kerastuner.engine.hyperparameters import HyperParameters# 创建两个数据生成器指定scaling否为0-1
# train_datagen ImageDataGenerator(rescale1 / 255)
# validation_datagen ImageDataGenerator(rescale1 / 255)
#
# # 指向训练数据文件夹
# train_genrator train_datagen.flow_from_directory(
# E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs\\train, # 训练数据所在文件夹
# target_size(300, 300), # 指定输出尺寸
# batch_size32, # 每次提取多少
# class_modebinary # 指定二分类
# )
#
# validation_genrator validation_datagen.flow_from_directory(
# E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs\\validation, # 训练数据所在文件夹
# target_size(300, 300), # 指定输出尺寸
# batch_size32, # 每次提取多少
# class_modebinary # 指定二分类
# )hp HyperParameters()def dogs_cats(hp):model tf.keras.models.Sequential()# values 指定范围model.add(tf.keras.layers.Conv2D(hp.Choice(num_filters_layer0, values[16, 64], default16),(3, 3), activationrelu,input_shape(64, 64, 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(fnum_filters_layer{i}, values[16, 64], default16), (3, 3),activationrelu))model.add(tf.keras.layers.MaxPooling2D(2, 2))model.add(tf.keras.layers.Flatten())model.add(tf.keras.layers.Dense(hp.Int(hidde_units, 128, 512, step32), activationrelu))model.add(tf.keras.layers.Dense(1, activationsigmoid)) # 如果是多分类用softmax2分类用sigmoid就可以了# 设置损失函数,优化函数model.compile(lossbinary_crossentropy, optimizerRMSprop(0.001), metrics[acc])return modelbase_dir E:\\BaiduNetdiskDownload\\06.TensorFlow框架课件资料\\Tensorflow课件资料\\猫狗识别项目实战\\猫狗识别\\猫狗识别\data\\cats_and_dogs
train_dir os.path.join(base_dir, train)
validation_dir os.path.join(base_dir, validation)# 训练集
train_cats_dir os.path.join(train_dir, cats)
train_dogs_dir os.path.join(train_dir, dogs)# 验证集
validation_cats_dir os.path.join(validation_dir, cats)
validation_dogs_dir os.path.join(validation_dir, dogs)
# 数据预处理
# 都进来的数据会被自动转换成tensorfloat32格式分别准备训练和验证
# 图像数据归一化0-1区间
train_datagen ImageDataGenerator(rescale1. / 255,rotation_range40,width_shift_range0.2,height_shift_range0.2,shear_range0.2,zoom_range0.2,horizontal_flipTrue,fill_modenearest
)
test_datagen ImageDataGenerator(rescale1. / 255)train_generator train_datagen.flow_from_directory(train_dir, # 文件夹路径target_size(64, 64), # 指定resize的大小batch_size20,# 如果one-hot就是categorical二分类用binary就可以class_modebinary
)
validation_generator test_datagen.flow_from_directory(validation_dir,target_size(64, 64),batch_size20,class_modebinary
)# 训练网络模型
# 直接fit也可以但是通常不能把所有数据全部放入内存fit_generator相当于一个生成器动态产生所需的batch数据
# steps_per_epoch相当给定一个停止条件因为生成器会不断产生batch数据说白了就是它不知道一个epoch里需要执行多少个step
# history model.fit_generator(
# train_generator,
# steps_per_epoch100,
# epochs5,
# validation_datavalidation_generator,
# validation_steps50,
# verbose2)tuner Hyperband(dogs_cats,objectiveval_acc,max_epochs15,directorydog_cats_params,hyperparametershp,project_namemy_dog_cat_project
)
tuner.search(train_generator, epochs10, validation_datavalidation_generator)# 查看参数情况
best_hps tuner.get_best_hyperparameters(1)[0]
print(best_hps.values)
# 通过参数将模型构建出来
model tuner.hypermodel.build(best_hps)
model.summary()