精华内容
下载资源
问答
  • 深度学习实战

    2020-10-17 16:46:40
    LSTM实战:空气质量预测
    展开全文
  • PyTorch深度学习实战

    2019-04-22 09:36:22
    《PyTorch深度学习实战》,作者候宜军,高清文字版,可复制。
  • 深度学习实战项目

    2018-11-26 10:55:38
    深度学习实战项目 本章将概要介绍什么是装饰器,以及装饰器如何与Python 的函数和类交互。本章还列 举了几个Python 标准类库中常见的装饰器。最后,本章提供了编写装饰器并将其附加到函 数和类上的指南
  • 深度学习实战:实战教程、手写数字识别、验证码识别
  • MATLAB计算机视觉与深度学习实战-运行代码 涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码识别、车牌定位及识别、霍夫曼图像压缩、手写数字识别、英文字符文本识别、眼前节组织...
  • 深度学习实战之垃圾分类

    万次阅读 多人点赞 2019-08-31 21:00:01
    然而我们在日常生活中认为对垃圾分类还是有些不知所措的,对干垃圾、湿垃圾……分的不是很清楚,由此我们就想到了使用深度学习的方法进行分类。 简介 本篇博文主要会带领大家进行数据的预处理、网络搭建、模型训练...

    垃圾分类,指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用;然而我们在日常生活中认为对垃圾分类还是有些不知所措的,对干垃圾、湿垃圾……分的不是很清楚,由此我们就想到了使用深度学习的方法进行分类。

    简介

    本篇博文主要会带领大家进行数据的预处理、网络搭建、模型训练、模型测试

    1. 获取数据集
    这里笔者已经为大家提供了一个比较完整的数据集,所以大家不必再自己去收集数据了
    数据集链接:https://pan.baidu.com/s/1OhA7yQt9evqNIP5CIPjdgw​
    提取码:Z5A1
    如下为数据集中的部分数据展示
    在这里插入图片描述
    这里就不过多的展示了,因为有些图片比较的不雅
    ok,不说题外话了,我们继续

    2.预处理数据集

    import torch,visdom,time
    import os,csv,random,glob
    from PIL import Image
    from torchvision import transforms
    from torch.utils.data import DataLoader,Dataset
    
    class Data(Dataset):
        def __init__(self,root,resize,model):
            super(Data, self).__init__()
            self.root=root
            self.resize=resize
            
            # dividing data
            if model=='train':
                self.images=self.images[:int(0.6*len(self.images))]
                self.labels=self.labels[:int(0.6*len(self.labels))]
            if model=='verify':
                self.images=self.images[int(0.6*len(self.images)):int(0.8*len(self.images))]
                self.labels=self.labels[int(0.6*len(self.labels)):int(0.8*len(self.labels))]
            else:
                self.images=self.images[int(0.8*len(self.images)):]
                self.labels=self.labels[int(0.8*len(self.labels)):]
    def main():
        # show data
        viz = visdom.Visdom()
        db = Data('data', 64, 'train')
    
        x,y = next(iter(db))
        print('sample:', x.shape, y.shape, y)
    
        viz.image(db.normalize(x), win='sample_x', opts=dict(title='sample_x'))
    
    if __name__ == '__main__':
        main()
    

    这里需要对数据进行增强,增强的最终结果如下图所示:
    在这里插入图片描述

    1. 搭建网络
      接下来进行搭建网络了,笔者这里使用的是resnet的网络结构
    import  torch
    from    torch import  nn
    from    torch.nn import functional as F
    class ResBlk(nn.Module):
      
        def __init__(self, ch_in, ch_out, stride=1):
         
            super(ResBlk, self).__init__()
    
            self.conv1 = nn.Conv2d(ch_in, ch_out, kernel_size=3, stride=stride, padding=1)
            self.bn1 = nn.BatchNorm2d(ch_out)
            self.conv2 = nn.Conv2d(ch_out, ch_out, kernel_size=3, stride=1, padding=1)
            self.bn2 = nn.BatchNorm2d(ch_out)
    
            self.extra = nn.Sequential()
            if ch_out != ch_in:
                # [b, ch_in, h, w] => [b, ch_out, h, w]
                self.extra = nn.Sequential(
                    nn.Conv2d(ch_in, ch_out, kernel_size=1, stride=stride),
                    nn.BatchNorm2d(ch_out)
                )
    class ResNet18(nn.Module):
    
        def __init__(self, num_class):
            super(ResNet18, self).__init__()
    
            self.conv1 = nn.Sequential(
                nn.Conv2d(3, 16, kernel_size=3, stride=3, padding=0),
                nn.BatchNorm2d(16)
            )
            # followed 4 blocks
            # [b, 16, h, w] => [b, 32, h ,w]
            self.blk1 = ResBlk(16, 32, stride=3)
            # [b, 32, h, w] => [b, 64, h, w]
            self.blk2 = ResBlk(32, 64, stride=3)
            # # [b, 64, h, w] => [b, 128, h, w]
            self.blk3 = ResBlk(64, 128, stride=2)
            # # [b, 128, h, w] => [b, 256, h, w]
            self.blk4 = ResBlk(128, 256, stride=2)
    
            self.outlayer = nn.Linear(256*3*3, num_class)
    
        def forward(self, x):
          
            return x
    
    def main():
       
    if __name__ == '__main__':
        main()
    
    
    1. 训练
    import torch
    from torch import optim, nn
    import visdom
    import torchvision
    from torch.utils.data import DataLoader
    
    from Data_Pre import Data
    # from    resnet import ResNet18
    from torchvision.models import resnet18
    
    from utils import Flatten
    
    batchsz = 32
    lr = 1e-3
    epochs = 20
    
    device = torch.device('cuda')
    torch.manual_seed(1234)
    
    train_db = Data('data', 224, model='train')
    val_db = Data('data', 224, model='verify')
    test_db = Data('data', 224, model='test')
    train_loader = DataLoader(train_db, batch_size=batchsz, shuffle=True,
                              num_workers=4)
    val_loader = DataLoader(val_db, batch_size=batchsz, num_workers=2)
    test_loader = DataLoader(test_db, batch_size=batchsz, num_workers=2)
    
    viz = visdom.Visdom()
    
    def evalute(model, loader):
        model.eval()
    
        correct = 0
        total = len(loader.dataset)
    
        for x, y in loader:
            x, y = x.to(device), y.to(device)
            with torch.no_grad():
                logits = model(x)
                pred = logits.argmax(dim=1)
            correct += torch.eq(pred, y).sum().float().item()
        return correct / total
    

    可视化训练结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    可以看到经过次的迭代后,模型的效果还是不错的,哈哈哈哈哈。。。。。。。
    5. 测试模型
    在这里插入图片描述
    项目完整代码:https://github.com/taotao/garbage
    有什么问题欢迎同笔者讨论:1017190168
    最后希望大家能够动手实践实践

    最新版本:

    自笔者于2019年8月发出了深度学习实战之垃圾分类博文以来,已被访问上万次,几百次的收藏。同时也有很多的人询问笔者关于这个项目的问题。在这里非常的感谢大家的厚爱。其实很早就想再迭代一个垃圾分类项目出来,但是由于之前比较的忙,一直没有时间将其落实。最近没什么事情,笔者花了一些时间又重新做了一个垃圾分类系统。希望对大家学习研究有所帮助。

    新版本链接:

    深度学习之垃圾分类系统(识别率近99%)
    垃圾分类识别系统(目标检测版)

    近期项目:

    新冠肺炎(Covid-19)病毒检测
    欢迎大家阅读、获取。

    申明近期笔者接计算机视觉方面的毕业设计、比赛,有需要的欢迎联系!!!

    展开全文
  • 玩转深度学习实战教程 乐川科技有限公司CEO,人工智能培训讲师,专业从事机器...

    扫码下载「CSDN程序员学院APP」,1000+技术好课免费看

    APP订阅课程,领取优惠,最少立减5元 ↓↓↓

    订阅后:请点击此处观看视频课程

     

    视频教程-玩转深度学习实战教程-深度学习

    学习有效期:永久观看

    学习时长:776分钟

    学习计划:13天

    难度:

     

    口碑讲师带队学习,让你的问题不过夜」

    讲师姓名:王而川

    CEO/董事长/总经理

    讲师介绍:乐川科技有限公司CEO,人工智能培训讲师,专业从事机器学习与深度学习培训。参与多个人工智能领域项目,专注于机器学习与计算机视觉领域,长期参与无人驾驶汽车项目,专注研究无人驾驶领域的目标识别与跟踪,善于人脸识别、物体识别、轨迹跟踪、点云识别分析等方向的新算法。

    ☛点击立即跟老师学习☚

     

    「你将学到什么?」

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

     

    「课程学习目录」

    第1章:TensorFlow基本用法和常用技巧
    1.TensorFlow系统介绍
    2.环境准备、安装以及常用库介绍
    3.TensorFlow的计算图与Session会话
    4.Tensor与变量
    5.TensorBoard可视化
    第2章:Titanic题目实战
    1.Kaggle平台介绍
    2.Titanic题目介绍
    3.数据读入以及预处理
    4.构建计算图、构建训练迭代过程
    5.执行训练、存储模型、预测分析
    第3章:卷积神经网络CNN”看懂”世界
    1.图像识别难题
    2.CNNs的层架架构
    3.卷积计算与池化运算
    4.ReLU与Dropout
    5.CNNs技巧总结
    第4章:CNNs实战手写图片识别
    1.MNIST 数据集介绍
    2.图片读入与预处理
    3.网络层的构建
    4.模型保存与训练
    5.结果分析,知识总结
    第5章:循环神经网络RNN”能说会道”
    1.文本理解和文本生成问题
    2.标准RNN模型
    3.BPTT算法讲解
    4.灵活的RNN结构
    5.TensorFlow实现正弦序列预测
    第6章:LSTM模型以及其他RNN变体
    1.RNN与序列问题
    2.LSTM基本原理
    3.LSTM变形GRU
    4.代码实现讲解
    5.代码实现讲解二
    第7章:语言模型实战写代码
    1.NGram语言模型
    2.神经网络语言模型
    3.循环神经网络语言模型
    4.语言模型写一首诗
    5.模型改进与总结
    第8章:对话机器人
    1.基于规则的对话系统
    2.基于检索的对话系统
    3.基于生成模型
    4.基于seq2seq的对话机器人
    5.模型生成、训练、分析结果
    第9章:CNN+LSTM看图说话
    1.cnn发展
    2.目标识别问题
    3.R-CNN到Faster R-CNN
    4.图像摘要问题
    5.NIC图像摘要生成算法
    第10章:损失函数与优化算法
    1.梯度下降算法
    2.RMSProp优化算法
    3.Adam优化算法
    4.softmax类别采样损失函数
    5.损失函数二
    6.损失函数三
    7.logistic损失函数
    8.损失函数

     

    7项超值权益,保障学习质量」

    • 大咖讲解

    技术专家系统讲解传授编程思路与实战。

    • 答疑服务

    专属社群随时沟通与讲师答疑,扫清学习障碍,自学编程不再难。

    • 课程资料+课件

    超实用资料,覆盖核心知识,关键编程技能,方便练习巩固。(部分讲师考虑到版权问题,暂未上传附件,敬请谅解)

    • 常用开发实战

    企业常见开发实战案例,带你掌握Python在工作中的不同运用场景。

    • 大牛技术大会视频

    2019Python开发者大会视频免费观看,送你一个近距离感受互联网大佬的机会。

    • APP+PC随时随地学习

    满足不同场景,开发编程语言系统学习需求,不受空间、地域限制。

     

    「什么样的技术人适合学习?」

    • 想进入互联网技术行业,但是面对多门编程语言不知如何选择,0基础的你
    • 掌握开发、编程技术单一、冷门,迫切希望能够转型的你
    • 想进入大厂,但是编程经验不够丰富,没有竞争力,程序员找工作难。

     

    「悉心打造精品好课,13天学到大牛3年项目经验」

    【完善的技术体系】

    技术成长循序渐进,帮助用户轻松掌握

    掌握深度学习知识,扎实编码能力

    【清晰的课程脉络】

    浓缩大牛多年经验,全方位构建出系统化的技术知识脉络,同时注重实战操作。

    【仿佛在大厂实习般的课程设计】

    课程内容全面提升技术能力,系统学习大厂技术方法论,可复用在日后工作中。

     

    「你可以收获什么?」

    实战教学,玩转深度学习,经过这个课程,你将掌握最火的深度学习的必备理论

    掌握利用TensorFlow实战能力,可以动手训练自己的数据,计算机视觉、NLP、语音模型等等都有讲解,深度学习入门到精通

    掌握深度学习脉络,成为一名基础的AI工程师

     

    展开全文
  • MATLAB计算机视觉与深度学习实战-运行代码
  • 深度学习实战指导-TensorFlow实例-源码,可帮助学习者通过实例掌握深度学习理论,进而掌握Tensorflow编程思想,方便您构建自己的深度学习框架。该实例教程包含笔记(notebooks)与带有解释的源码(source codes with...
  • 阶段一:深度学习基础理论 阶段二:PyTorch实战深度学习算法 阶段三:TensorFlow 2实战深度学习算法
  • 刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程。 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内容:(更新ing) NLP机器翻译深度学习实战课程·零(基础概念) NLP机器...

    深度学习用的有一年多了,最近开始NLP自然处理方面的研发。刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程。

    本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内容:(更新ing)

    本系列教程参考博客:https://me.csdn.net/chinatelecom08

    开源地址:https://github.com/xiaosongshine/MNT_RNN_Keras

    个人主页:http://www.yansongsong.cn/

    0.  项目背景

    在上个文章中,我们已经简单介绍了NLP机器翻译,这次我们将用实战的方式讲解基于RNN的翻译模型。

     

    0.1  基于RNN的seq2seq架构翻译模型介绍

    seq2seq结构

    基于RNN的seq2seq架构包含encoder和decoder,decoder部分又分train和inference两个过程,具体结构如下面两图所示:

    这里写图片描述

    这里写图片描述

    可以看出结构很简单(相较于CNN与Attention base),下面我们就通过代码的形式实现,来进一步探究理解模型内在原理。


    1.  数据准备

     

    1.1 下载数据
     

    此网站http://www.manythings.org/anki/上有许多翻译数据,包含多种语言,这里此教程选择的是中文到英语的数据集。

    训练下载地址:http://www.manythings.org/anki/cmn-eng.zip

    解压cmn-eng.zip,可以找到cmn.txt文件,内容如下:

    # ========读取原始数据========
    with open('cmn.txt', 'r', encoding='utf-8') as f:
        data = f.read()
    data = data.split('\n')
    data = data[:100]
    print(data[-5:])
    
    ['Tom died.\t汤姆去世了。', 'Tom quit.\t汤姆不干了。', 'Tom swam.\t汤姆游泳了。', 'Trust me.\t相信我。', 'Try hard.\t努力。']
    

    可以发现,每对翻译数据在同一行,左边是英文,右边是中文使用 \t 作为英语与中文的分界。

     

    1.2  数据预处理

    使用网络训练,需要我们把数据处理成网络可以接收的格式。

    针对这个数据,具体来说就是需要把字符转换为数字(句子数字化),句子长度归一化处理。

    句子数字化

    可以参考我的这博客:『深度应用』NLP命名实体识别(NER)开源实战教程,数据预处理的实现。

    分别对英语与汉字做处理。

    英文处理

    因为英语每个单词都是用空格分开的(除了缩写词,这里缩写词当做一个词处理),还有就是标点符号和单词没有分开,也需要特殊处理一下

    这里我用的是一个简单方法处理下,实现在标点前加空格:

    def split_dot(strs,dots=", . ! ?"):
        for d in dots.split(" "):
            #print(d)
            strs = strs.replace(d," "+d)
            #print(strs)
        return(strs)

    使用这个方法来把词个字典化:

    ef get_eng_dicts(datas):
        w_all_dict = {}
        for sample in datas:
            for token in sample.split(" "):
                if token not in w_all_dict.keys():
                    w_all_dict[token] = 1
                else:
                    w_all_dict[token] += 1
     
        sort_w_list = sorted(w_all_dict.items(),  key=lambda d: d[1], reverse=True)
    
    
        w_keys = [x for x,_ in sort_w_list[:7000-2]]
        w_keys.insert(0,"<PAD>")
        w_keys.insert(0,"<UNK>")
        
     
        w_dict = { x:i for i,x in enumerate(w_keys) }
        i_dict = { i:x for i,x in enumerate(w_keys) }
        return w_dict,i_dict

    中文处理

    在处理中文时可以发现,有繁体也有简体,所以最好转换为统一形式:(参考地址

    # 安装
    pip install opencc-python-reimplemented
    
    # t2s - 繁体转简体(Traditional Chinese to Simplified Chinese)
    # s2t - 简体转繁体(Simplified Chinese to Traditional Chinese)
    # mix2t - 混合转繁体(Mixed to Traditional Chinese)
    # mix2s - 混合转简体(Mixed to Simplified Chinese)

    使用方法,把繁体转换为简体:

    import opencc
    cc = opencc.OpenCC('t2s')
    s = cc.convert('這是什麼啊?')
    print(s)
    #这是什么啊?

    再使用jieba分词的方法来从句子中分出词来:

    def get_chn_dicts(datas):
        w_all_dict = {}
        for sample in datas:
            for token in jieba.cut(sample):
                if token not in w_all_dict.keys():
                    w_all_dict[token] = 1
                else:
                    w_all_dict[token] += 1
     
        sort_w_list = sorted(w_all_dict.items(),  key=lambda d: d[1], reverse=True)
    
        w_keys = [x for x,_ in sort_w_list[:10000-4]]
        w_keys.insert(0,"<EOS>")
        w_keys.insert(0,"<GO>")
        w_keys.insert(0,"<PAD>")
        w_keys.insert(0,"<UNK>")
        w_dict = { x:i for i,x in enumerate(w_keys) }
        i_dict = { i:x for i,x in enumerate(w_keys) }
        return w_dict,i_dict

    下面进行padding

     

    def get_val(keys,dicts):
        if keys in dicts.keys():
            val = dicts[keys]
        else:
            keys = "<UNK>"
            val = dicts[keys]
        return(val)
    
    def padding(lists,lens=LENS):
        list_ret = []
        for l in lists:
            
            while(len(l)<lens):
                l.append(1)
    
            if len(l)>lens:
                l = l[:lens]
            list_ret.append(l)
        
        return(list_ret)

    最后统一运行处理一下:

    if __name__ == "__main__":
        df = read2df("cmn-eng/cmn.txt")
        eng_dict,id2eng = get_eng_dicts(df["eng"])
        chn_dict,id2chn = get_chn_dicts(df["chn"])
        print(list(eng_dict.keys())[:20])
        print(list(chn_dict.keys())[:20])
    
        enc_in = [[get_val(e,eng_dict) for e in eng.split(" ")] for eng in df["eng"]]
        dec_in = [[get_val("<GO>",chn_dict)]+[get_val(e,chn_dict) for e in jieba.cut(eng)]+[get_val("<EOS>",chn_dict)] for eng in df["chn"]]
        dec_out = [[get_val(e,chn_dict) for e in jieba.cut(eng)]+[get_val("<EOS>",chn_dict)] for eng in df["chn"]]
    
        enc_in_ar = np.array(padding(enc_in,32))
        dec_in_ar = np.array(padding(dec_in,30))
        dec_out_ar = np.array(padding(dec_out,30))

    输出结果如下: 

    (TF_GPU) D:\Files\Prjs\Pythons\Kerases\MNT_RNN>C:/Datas/Apps/RJ/Miniconda3/envs/TF_GPU/python.exe d:/Files/Prjs/Pythons/Kerases/MNT_RNN/mian.py        
    Using TensorFlow backend.
           eng    chn
    0     Hi .     嗨。
    1     Hi .    你好。
    2    Run .  你用跑的。
    3   Wait !    等等!
    4  Hello !    你好。
    save csv
    Building prefix dict from the default dictionary ...
    Loading model from cache C:\Users\xiaos\AppData\Local\Temp\jieba.cache
    Loading model cost 0.788 seconds.
    Prefix dict has been built succesfully.
    ['<UNK>', '<PAD>', '.', 'I', 'to', 'the', 'you', 'a', '?', 'is', 'Tom', 'He', 'in', 'of', 'me', ',', 'was', 'for', 'have', 'The']
    ['<UNK>', '<PAD>', '<GO>', '<EOS>', '。', '我', '的', '了', '你', '他', '?', '在', '汤姆', '是', '她', '吗', '我们', ',', '不', '很']

    2. 构建模型与训练

    2.1 构建模型与超参数

    用的是双层LSTM网络

    # =======预定义模型参数========
    EN_VOCAB_SIZE = 7000
    CH_VOCAB_SIZE = 10000
    HIDDEN_SIZE = 256
    
    LEARNING_RATE = 0.001
    BATCH_SIZE = 50
    EPOCHS = 100
    
    # ======================================keras model==================================
    from keras.models import Model
    from keras.layers import Input, LSTM, Dense, Embedding,CuDNNLSTM
    from keras.optimizers import Adam
    import numpy as np
    
    def get_model():
        # ==============encoder=============
        encoder_inputs = Input(shape=(None,))
        emb_inp = Embedding(output_dim=128, input_dim=EN_VOCAB_SIZE)(encoder_inputs)
        encoder_h1, encoder_state_h1, encoder_state_c1 = CuDNNLSTM(HIDDEN_SIZE, return_sequences=True, return_state=True)(emb_inp)
        encoder_h2, encoder_state_h2, encoder_state_c2 = CuDNNLSTM(HIDDEN_SIZE, return_state=True)(encoder_h1)
    
        # ==============decoder=============
        decoder_inputs = Input(shape=(None,))
    
        emb_target = Embedding(output_dim=128, input_dim=CH_VOCAB_SIZE)(decoder_inputs)
        lstm1 = CuDNNLSTM(HIDDEN_SIZE, return_sequences=True, return_state=True)
        lstm2 = CuDNNLSTM(HIDDEN_SIZE, return_sequences=True, return_state=True)
        decoder_dense = Dense(CH_VOCAB_SIZE, activation='softmax')
    
        decoder_h1, _, _ = lstm1(emb_target, initial_state=[encoder_state_h1, encoder_state_c1])
        decoder_h2, _, _ = lstm2(decoder_h1, initial_state=[encoder_state_h2, encoder_state_c2])
        decoder_outputs = decoder_dense(decoder_h2)
    
        model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
    
        # encoder模型和训练相同
        encoder_model = Model(encoder_inputs, [encoder_state_h1, encoder_state_c1, encoder_state_h2, encoder_state_c2])
    
        # 预测模型中的decoder的初始化状态需要传入新的状态
        decoder_state_input_h1 = Input(shape=(HIDDEN_SIZE,))
        decoder_state_input_c1 = Input(shape=(HIDDEN_SIZE,))
        decoder_state_input_h2 = Input(shape=(HIDDEN_SIZE,))
        decoder_state_input_c2 = Input(shape=(HIDDEN_SIZE,))
    
        # 使用传入的值来初始化当前模型的输入状态
        decoder_h1, state_h1, state_c1 = lstm1(emb_target, initial_state=[decoder_state_input_h1, decoder_state_input_c1])
        decoder_h2, state_h2, state_c2 = lstm2(decoder_h1, initial_state=[decoder_state_input_h2, decoder_state_input_c2])
        decoder_outputs = decoder_dense(decoder_h2)
    
        decoder_model = Model([decoder_inputs, decoder_state_input_h1, decoder_state_input_c1, decoder_state_input_h2, decoder_state_input_c2], 
                            [decoder_outputs, state_h1, state_c1, state_h2, state_c2])
    
    
        return(model,encoder_model,decoder_model)

    2.2 模型配置与训练

    自定义了一个acc,便于显示效果,keras内置的acc无法使用

    import keras.backend as K
    from keras.models import load_model
     
    def my_acc(y_true, y_pred):
        acc = K.cast(K.equal(K.max(y_true,axis=-1),K.cast(K.argmax(y_pred,axis=-1),K.floatx())),K.floatx())
        return acc
    
    
    Train = True
    
    if __name__ == "__main__":
        df = read2df("cmn-eng/cmn.txt")
        eng_dict,id2eng = get_eng_dicts(df["eng"])
        chn_dict,id2chn = get_chn_dicts(df["chn"])
        print(list(eng_dict.keys())[:20])
        print(list(chn_dict.keys())[:20])
    
        enc_in = [[get_val(e,eng_dict) for e in eng.split(" ")] for eng in df["eng"]]
        dec_in = [[get_val("<GO>",chn_dict)]+[get_val(e,chn_dict) for e in jieba.cut(eng)]+[get_val("<EOS>",chn_dict)] for eng in df["chn"]]
        dec_out = [[get_val(e,chn_dict) for e in jieba.cut(eng)]+[get_val("<EOS>",chn_dict)] for eng in df["chn"]]
    
        enc_in_ar = np.array(padding(enc_in,32))
        dec_in_ar = np.array(padding(dec_in,30))
        dec_out_ar = np.array(padding(dec_out,30))
    
        #dec_out_ar = covt2oh(dec_out_ar)
    
    
        
        if Train:
    
    
            model,encoder_model,decoder_model = get_model()
    
            model.load_weights('e2c1.h5')
    
            opt = Adam(lr=LEARNING_RATE, beta_1=0.9, beta_2=0.99, epsilon=1e-08)
            model.compile(optimizer=opt, loss='sparse_categorical_crossentropy',metrics=[my_acc])
            model.summary()
            print(dec_out_ar.shape)
            model.fit([enc_in_ar, dec_in_ar], np.expand_dims(dec_out_ar,-1),
                    batch_size=50,
                    epochs=64,
                    initial_epoch=0,
                    validation_split=0.1)
            model.save('e2c1.h5')
            encoder_model.save("enc1.h5")
            decoder_model.save("dec1.h5")

    64Epoch训练结果如下: 

    __________________________________________________________________________________________________
    Layer (type)                    Output Shape         Param #     Connected to
    ==================================================================================================
    input_1 (InputLayer)            (None, None)         0
    __________________________________________________________________________________________________
    input_2 (InputLayer)            (None, None)         0
    __________________________________________________________________________________________________
    embedding_1 (Embedding)         (None, None, 128)    896000      input_1[0][0]
    __________________________________________________________________________________________________
    embedding_2 (Embedding)         (None, None, 128)    1280000     input_2[0][0]
    __________________________________________________________________________________________________
    cu_dnnlstm_1 (CuDNNLSTM)        [(None, None, 256),  395264      embedding_1[0][0]
    __________________________________________________________________________________________________
    cu_dnnlstm_3 (CuDNNLSTM)        [(None, None, 256),  395264      embedding_2[0][0]
                                                                     cu_dnnlstm_1[0][1]
                                                                     cu_dnnlstm_1[0][2]
    __________________________________________________________________________________________________
    cu_dnnlstm_2 (CuDNNLSTM)        [(None, 256), (None, 526336      cu_dnnlstm_1[0][0]
    __________________________________________________________________________________________________
    cu_dnnlstm_4 (CuDNNLSTM)        [(None, None, 256),  526336      cu_dnnlstm_3[0][0]
                                                                     cu_dnnlstm_2[0][1]
                                                                     cu_dnnlstm_2[0][2]
    __________________________________________________________________________________________________
    dense_1 (Dense)                 (None, None, 10000)  2570000     cu_dnnlstm_4[0][0]
    ==================================================================================================
    Non-trainable params: 0
    __________________________________________________________________________________________________
    ...
    ...
    19004/19004 [==============================] - 98s 5ms/step - loss: 0.1371 - my_acc: 0.9832 - val_loss: 2.7299 - val_my_acc: 0.7412
    Epoch 58/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.1234 - my_acc: 0.9851 - val_loss: 2.7378 - val_my_acc: 0.7410
    Epoch 59/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.1132 - my_acc: 0.9867 - val_loss: 2.7477 - val_my_acc: 0.7419
    Epoch 60/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.1050 - my_acc: 0.9879 - val_loss: 2.7660 - val_my_acc: 0.7426
    Epoch 61/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.0983 - my_acc: 0.9893 - val_loss: 2.7569 - val_my_acc: 0.7408
    Epoch 62/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.0933 - my_acc: 0.9903 - val_loss: 2.7775 - val_my_acc: 0.7414
    Epoch 63/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.0885 - my_acc: 0.9911 - val_loss: 2.7885 - val_my_acc: 0.7420
    Epoch 64/64
    19004/19004 [==============================] - 96s 5ms/step - loss: 0.0845 - my_acc: 0.9920 - val_loss: 2.7914 - val_my_acc: 0.7423

    3. 模型应用与预测

    从训练集选取部分数据进行测试

    Train = False
    
    if __name__ == "__main__":
        df = read2df("cmn-eng/cmn.txt")
        eng_dict,id2eng = get_eng_dicts(df["eng"])
        chn_dict,id2chn = get_chn_dicts(df["chn"])
        print(list(eng_dict.keys())[:20])
        print(list(chn_dict.keys())[:20])
    
        enc_in = [[get_val(e,eng_dict) for e in eng.split(" ")] for eng in df["eng"]]
        dec_in = [[get_val("<GO>",chn_dict)]+[get_val(e,chn_dict) for e in jieba.cut(eng)]+[get_val("<EOS>",chn_dict)] for eng in df["chn"]]
        dec_out = [[get_val(e,chn_dict) for e in jieba.cut(eng)]+[get_val("<EOS>",chn_dict)] for eng in df["chn"]]
    
        enc_in_ar = np.array(padding(enc_in,32))
        dec_in_ar = np.array(padding(dec_in,30))
        dec_out_ar = np.array(padding(dec_out,30))
    
        #dec_out_ar = covt2oh(dec_out_ar)
    
    
        
        if Train:
    
    
            pass
        
        else:
    
            encoder_model,decoder_model = load_model("enc1.h5",custom_objects={"my_acc":my_acc}),load_model("dec1.h5",custom_objects={"my_acc":my_acc})
    
            for k in range(16000-20,16000):
                test_data = enc_in_ar[k:k+1]
                h1, c1, h2, c2 = encoder_model.predict(test_data)
                target_seq = np.zeros((1,1))
                
                outputs = []
                target_seq[0, len(outputs)] = chn_dict["<GO>"]
                while True:
                    output_tokens, h1, c1, h2, c2 = decoder_model.predict([target_seq, h1, c1, h2, c2])
                    sampled_token_index = np.argmax(output_tokens[0, -1, :])
                    #print(sampled_token_index)
                    outputs.append(sampled_token_index)
                    #target_seq = np.zeros((1, 30))
                    target_seq[0, 0] = sampled_token_index
                    #print(target_seq)
                    if sampled_token_index == chn_dict["<EOS>"] or len(outputs) > 28: break
                
                print("> "+df["eng"][k])
                print("< "+' '.join([id2chn[i] for i in outputs[:-1]]))
                print()

    测试结果如下:基本上都翻译正确了。

    > I can understand you to some extent .
    < 在 某种程度 上 我 能 了解 你 。
    
    > I can't recall the last time we met .
    < 我 想不起来 我们 上次 见面 的 情况 了 。
    
    > I can't remember which is my racket .
    < 我 不 记得 哪个 是 我 的 球拍 。
    
    > I can't stand that noise any longer .
    < 我 不能 再 忍受 那 噪音 了 。
    
    > I can't stand this noise any longer .
    < 我 无法 再 忍受 这个 噪音 了 。
    
    > I caught the man stealing the money .
    < 我 抓 到 了 这个 男人 正在 偷钱 。
    
    > I could not afford to buy a bicycle .
    < 我 买不起 自行车 。
    
    > I couldn't answer all the questions .
    < 我 不能 回答 所有 的 问题 。
    
    > I couldn't think of anything to say .
    < 我 想不到 要说 什么 话 。
    
    > I cry every time I watch this movie .
    < 我 每次 看 这部 电影 都 会 哭 。
    
    > I did not participate in the dialog .
    < 我 没有 参与 对话 。
    
    > I didn't really feel like going out .
    < 我 不是 很想 出去 。
    
    > I don't care a bit about the future .
    < 我 不在乎 将来 。

     

    展开全文
  • TensorFlow 深度学习实战指南中文版

    千次阅读 2019-09-24 10:17:17
    TensorFlow 深度学习实战指南中文版 第 1 章入门 安装 TensorFlow 简单的计算 逻辑回归模型构建 逻辑回归训练 第 2 章深度神经网络 基本神经网络 单隐藏层模型 单隐藏层说明 多重隐藏层模型 多重隐藏层的结果 ...
  • 玩转深度学习实战教程

    千人学习 2018-05-08 10:41:55
    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积...
  • pytorch深度学习实战

    2019-04-18 10:23:22
    本文档是pytorch入门书的全书代码,调试无误,通过代码的运行了解pytorch基本框架,了解深度学习基本原理。
  • 《Web安全之深度学习实战》 京东链接 网盘链接 [网盘链接 提取码: c8xm](链接: ) 主要内容  在现今的互联网公司中,产品线绵延复杂,安全防御体系无时无刻不在应对新的挑战。哪怕是拥有丰富工作经验的安全从业者,...
  • 刚好趁着这个机会写一系列NLP机器翻译深度学习实战课程。 本系列课程将从原理讲解与数据处理深入到如何动手实践与应用部署,将包括以下内容:(更新ing) NLP机器翻译深度学习实战课程·零(基础概念) NLP机器...
  • 深度学习实战tensorflow目标检测-1-目录 深度学习实战tensorflow目标检测-2-工具软件安装 深度学习实战tensorflow目标检测-3-数据集的制作 深度学习实战tensorflow目标检测-4-代码修改 深度学习实战tensorflow...
  • 深度学习实战部署系列 1、训练环境 1.1 基础环境 NVIDIA驱动\CUDA\CUDNN\ 1.2 Docker\NVIDIA-docker\Nvidia-container-toolkit 1.3 深度学习框架TF2\Pytorch 待补充 2、测试环境 2.1 Jeston nano 2.2 Tensorflow-...
  • 飞桨PaddlePaddle深度学习实战
  • 亚马逊电子书-Keras快速上手:基于Python的深度学习实战,kindle电子书
  • 我的第一本书《MXNet深度学习实战

    万次阅读 热门讨论 2018-11-26 21:19:10
    这篇博客介绍下我即将出版的第一本书:《MXNet深度学习实战》,欢迎大家多多支持。 为什么写这本书 2018年3月,华章图书的杨老师在博客上联系我,问我是否有出书意向,内容是深度学习框架方面的实战教学。当时的我...
  • Keras快速上手:基于Python的深度学习实战_源码 Keras快速上手:基于Python的深度学习实战_源码
  • Keras快速上手:基于Python的深度学习实战_源码 Keras快速上手:基于Python的深度学习实战_源码
  • 作者 | 小宋是呢来源 | CSDN博客0.前言深度学习用的有一年多了,最近开始 NLP 自然处理方面的研发。刚好趁着这个机会写一系列 NLP 机器翻译深度学习实战课程。...
  • TF2.0深度学习实战(八):搭建DenseNet稠密神经网络

    千次阅读 多人点赞 2020-05-03 21:57:55
    全网最全的《TF2.0深度学习实战:图像分类/目标检测》教程,小白看了都会!
  • 【37】深度学习实战项目-利用RNN与LSTM网络原理进行唐诗生成视频课程 .txt【37】深度学习实战项目-利用RNN与LSTM网络原理进行唐诗生成视频课程 .txt【37】深度学习实战项目-利用RNN与LSTM网络原理进行唐诗生成视频...
  • 计算机视觉处理高级培训课程从CV基础到深度学习实战 第一讲:工欲善其事必先利器——图像处理基础 第二讲:初探计算机视觉 第三讲:空域图像处理的洪荒之力 第四讲:机器视觉中的特征提取与描述 第五讲:坐标变换与...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,953
精华内容 4,781
关键字:

深度学习实战