[Kaggle] dogs-vs-cats之模型训练

上一步建立好模型之后,现在就可以训练模型了。

主要代码如下:

import sys
#将当期路径加入系统path中
sys.path.append("E:\\CODE\\Anaconda\\tensorflow\\Kaggle\\My-TensorFlow-tutorials-master\\01 cats vs dogs\\")

import os
import numpy as np
import tensorflow as tf
import input_data
import model

#%%

N_CLASSES = 2 #类别数
IMG_W = 208  # resize the image, if the input image is too large, training will be very slow.
IMG_H = 208
BATCH_SIZE = 16
CAPACITY = 2000 #队列中元素个数
MAX_STEP = 10000 #最大迭代次数 with current parameters, it is suggested to use MAX_STEP>10k
learning_rate = 0.0001 # with current parameters, it is suggested to use learning rate<0.0001

#%%
def run_training():

    # you need to change the directories to yours.
    #train_dir = ‘/home/kevin/tensorflow/cats_vs_dogs/data/train/‘#数据存放路径
    train_dir = ‘E:\\data\\Dog_Cat\\train\\‘
    #logs_train_dir = ‘/home/kevin/tensorflow/cats_vs_dogs/logs/train/‘#存放训练参数,模型等
    logs_train_dir = "E:\\CODE\\Anaconda\\tensorflow\\Kaggle\\My-TensorFlow-tutorials-master\\01 cats vs dogs\\"

    train, train_label = input_data.get_files(train_dir)

    train_batch, train_label_batch = input_data.get_batch(train,
                                                          train_label,
                                                          IMG_W,
                                                          IMG_H,
                                                          BATCH_SIZE,
                                                          CAPACITY)
    train_logits = model.inference(train_batch, BATCH_SIZE, N_CLASSES)#获得模型的输出
    train_loss = model.losses(train_logits, train_label_batch)#获取loss
    train_op = model.trainning(train_loss, learning_rate)#训练模型
    train__acc = model.evaluation(train_logits, train_label_batch)#模型评估

    summary_op = tf.summary.merge_all()
    sess = tf.Session()
    train_writer = tf.summary.FileWriter(logs_train_dir, sess.graph)#把summary保存到路径中
    saver = tf.train.Saver()

    sess.run(tf.global_variables_initializer())
    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(sess=sess, coord=coord)

    try:
        for step in np.arange(MAX_STEP):
            if coord.should_stop():
                    break
            _, tra_loss, tra_acc = sess.run([train_op, train_loss, train__acc])

            if step % 50 == 0:
                print(‘Step %d, train loss = %.2f, train accuracy = %.2f%%‘ %(step, tra_loss, tra_acc*100.0))
                summary_str = sess.run(summary_op)
                train_writer.add_summary(summary_str, step)

            if step % 2000 == 0 or (step + 1) == MAX_STEP:
                checkpoint_path = os.path.join(logs_train_dir, ‘model.ckpt‘)
                saver.save(sess, checkpoint_path, global_step=step)#保存模型及参数

    except tf.errors.OutOfRangeError:
        print(‘Done training -- epoch limit reached‘)
    finally:
        coord.request_stop()

    coord.join(threads)
    sess.close()

run_training()

一些函数说明如下:

1)tf.summary.merge_all

作用:Merges all summaries collected in the default graph.

2)tf.summary.FileWriter

作用:Writes Summary protocol buffers to event files.

3)tf.train.Saver

作用:保存和恢复变量。

举例:

saver.save(sess, ‘my-model‘, global_step=0)

==> filename: ‘my-model-0‘
...
saver.save(sess, ‘my-model‘, global_step=1000)

==> filename: ‘my-model-1000‘ 

4)add_summary

作用:Writes Summary protocol buffers to event files.

程序运行后,控制台输出如下:

训练期间,也可以使用tensorboard查看模型训练情况。

可以使用如下命令打开tensorboard。

tensorboard --logdir=log文件路径

log文件路径即为程序中设置的logs_train_dir。

启动tensorboard之后,打开浏览器,输入对应网址,即可查看训练情况。

整体解码如下图:

loss与step的关系如下(两条曲线的原因是训练了两次,一次迭代了10000步,另一次迭代了15000步):

也可以选择查看模型:

说明:

代码来自:https://github.com/kevin28520/My-TensorFlow-tutorials,略有修改

函数作用主要参考tensorflow官网。https://www.tensorflow.org/versions/master/api_docs/

时间: 2024-08-30 01:16:38

[Kaggle] dogs-vs-cats之模型训练的相关文章

输入法之模型训练

输入法,尤其是拼音输入法,解决的就是一些序列标注的问题,针对给定的状态(拼音),获取其概率最高的隐状态(中文). 这个是一个标准的HMM,针对HMM的解码过程,是一个很成熟也很完备的东西. local的计算和存储能力都有限,我们选择一般是二阶马尔科夫,也就是所谓的bigram model. 高阶对质量会有帮助,但是涉及到存储和计算,工程上不可行. 同理,利用ME 以及CRFmodel都可以解决这一类的标注问题,同样是工程上的问题,不太可行. 确定了采用bigram model,那么训练过程也就很

机器学习基本概念和模型训练基本问题

分类与回归的区别 二叉树 二叉树很容易理解,在这里我们一般用满二叉树:就是非叶子节点都有2个分支的树形数据结构 决策树分类 决策树最初是用来做决策用的,就好像下面的见不见相亲对象的决策过程一样: 如果把最后的决策结果看成是分类,那么决策树就可以用来分类了,例如,下面的例子就是把相亲对象分为见和不见两种. 下面通过一个例子来区分这些概念 特征,正负样本,训练集(数据),验证集(数据),预测集(数据) 我们的数据集是一百个点,如下图所示,是二维平面的100个点,这个就是我们总的数据集(全集),这些数

opencv_人脸检测、模型训练、人脸识别

人脸检测.模型训练.人脸识别 2018-08-15 今天给大家带来一套人脸识别一个小案例,主要是帮助小伙伴们解决如何入门OpenCV人脸识别的问题,现在的AI行业比较火热,AI技术的使用比较广泛.就拿现在的只能手机来说吧,现在很多智能手机都必须有人脸识别解锁.拍照自动美颜.拍照物体识别等等功能,这些都是AI技术的功劳.在此也不多说了,让我们来见证奇迹的发生. 1.首先我们先准备好跑代码的环境,这一点很重要,我在跑这个代码的时候就是环境配置搞了我半天的实际,很头疼.我使用的是python3.6.5

模型训练技巧

模型训练技巧 神经网络模型设计训练流程 图1-1 神经模型设计流程 当我们设计并训练好一个神经网络之后,需要在训练集上进行验证模型效果是否良好.这一步的目的在于判断模型是否存在欠拟合:在确定已经在训练集上拟合的很好,就需要在测试集上进行验证,如果验证结果差就需要重新设计模型:如果效果一般,可能需要增加正则化,或者增加训练数据: 欠拟合处理策略 当模型在训练集上的表现结果并不好的时候,在排除不是数据集和训过程有问题,你可以采用以下几个方法来进行处理. 更换激活函数 Sigmoid激活函数 Sigm

AI模型训练无需购买设备啦!Tesar超算网络让AI模型训练更便捷!

现代科技的发展可以用日新月异来形容,新技术的出现也是层出不穷.一个眨眼的功夫,一门足以改变世界的应用可能就被发明出来了,当然也有可能一个遥遥领先的企业瞬间被超越.处在风云变化时代,最重要的就是时间,就是效率. 对于人工智能行业尤为如此,我们的衣食住行方面都有涉及到人工智能,这将为我们未来的生活提供便捷,一个优秀的idea 被构想出来之后就需要在最短的时间内实现应用,不然就很可能错失先机,被别的企业率先投入使用.而AI在进行深度学习模型训练的时候,需要耗费大量的时间与计算资源,如何在这方面节约时间

使用yolo3模型训练自己的数据集

使用yolo3模型训练自己的数据集 本项目地址:https://github.com/Cw-zero/Retrain-yolo3 一.运行环境 1. Ubuntu16.04. 2. TensorFlow-gpu 1.4.0 或更高版本. 3. Keras 2.2.4 . 4. numpy 1.15.2(实测1.16.1会报错). 二.创建数据集 1. 使用VOC2007数据集的文件结构: 文件结构如下图,可以自己创建,也可以下载VOC2007数据集后删除文件内容. 注:数据集中没有 test.p

神经网络+CNN模型训练总结:

Keras中有一个层是Flatten层,这个层可以把二维的图片转换成一维的数据,因此不需要单独做处理,而是在做完各种数据预处理后,用这个平层,把二维的数据处理成一维. Keras模型中有对数据进行分类,首先不是一定需要把所有的图片都处理成正方形,长方形的图片一样可以进行各种处理,另外,压缩成小的图片是为了处理量小,快速方便,而不是因为一定要这么做,如果资源够的话,那么就用原图也可以. 神经网络层的输入必须是numpy数组,或者numpy数组组成的数组.只有这个格式的数据才可以输入模型训练,另外,

用深度学习做命名实体识别(四)——模型训练

通过本文你将了解如何训练一个人名.地址.组织.公司.产品.时间,共6个实体的命名实体识别模型. 准备训练样本 下面的链接中提供了已经用brat标注好的数据文件以及brat的配置文件,因为标注内容较多放到brat里加载会比较慢,所以拆分成了10份,每份包括3000多条样本数据,将这10份文件和相应的配置文件放到brat目录/data/project路径下,然后就可以从浏览器访问文件内容以及相应的标注情况了. 链接:https://pan.baidu.com/s/1-wjQnvCSrbhor9x3G

95行代码实现最大熵模型训练

关于最大熵模型的介绍请看:http://www.cnblogs.com/hexinuaa/p/3353479.html 下面是GIS训练算法的python实现,代码不到100行. from collections import defaultdict import math class MaxEnt(object): def __init__(self): self.feats = defaultdict(int) self.trainset = [] self.labels = set() d