吴恩达深度学习专项课程的所有实验均采用iPython Notebooks实现,不熟悉的朋友可以提前使用一下Notebooks。
目录
1.实验综述
2.加载必要的包
from keras.layers import Bidirectional, Concatenate, Permute, Dot, Input, LSTM, Multiply
from keras.layers import RepeatVector, Dense, Activation, Lambda
from keras.optimizers import Adam
from keras.utils import to_categorical
from keras.models import load_model, Model
import keras.backend as K
import numpy as np
#!pip install faker #安装faker
from faker import Faker
import random
from tqdm import tqdm
from babel.dates import format_date
from nmt_utils import * #./nmt_utils.py
import matplotlib.pyplot as plt
%matplotlib inline
3.把人类可读日期转换为机器可读日期
- 数据集
我们将在一个包含10000个人类可读日期及其对应的标准机器可读日期的数据集上训练我们的模型。接下里加载数据集并打印一些样本。
m = 10000
dataset,human_vocab,machine_vocab,inv_machine_vocab = load_dataset(m)
print(dataset[:10]) #打印前10个样本
print(human_vocab)
print(inv_machine_vocab)
print(machine_vocab)
查看头文件中的load_dataset()及其相关函数:
# 定义生成日期数据的格式
FORMATS = ['short',
'medium',
'long',
'full',
'full',
'full',
'full',
'full',
'full',
'full',
'full',
'full',
'full',
'd MMM YYY',
'd MMMM YYY',
'dd MMM YYY',
'd MMM, YYY',
'd MMMM, YYY',
'dd, MMM YYY',
'd MM YY',
'd MMMM YYY',
'MMMM d YYY',
'MMMM d, YYY',
'dd.MM.YY']
# 如果想生成其他语言的日期 可以修改这里
LOCALES = ['en_US']
def load_date():
"""
加载一些假的日期
:returns: 元组,包括人类可读日期,机器可读日期和数据对象。
"""
dt = fake.date_object()
try:
human_readable = format_date(dt, format=random.choice(FORMATS), locale='en_US') # locale=random.choice(LOCALES)) 生成一些人类可读的随机格式的日期
human_readable = human_readable.lower() #日期小写化
human_readable = human_readable.replace(',','') #将日期中的,替换为''
machine_readable = dt.isoformat() #生成对应的机器可读日期
except AttributeError as e:
return None, None, None
return human_readable, machine_readable, dt
def load_dataset(m):
"""
加载包含m个样本和词的数据集
m: 生成样本的数量
"""
human_vocab = set() #集合 人类可读日期
machine_vocab = set() #集合 机器可读日期
dataset = [] #数据集
Tx = 30
for i in tqdm(range(m)): #生成m对数据
h, m, _ = load_date() #得到一对人类可读日期和机器可读日期
if h is not None:
dataset.append((h, m)) #添加到数据集列表中
human_vocab.update(tuple(h))#将人类可读日期转换为元组 加到人类可读日期集合中
machine_vocab.update(tuple(m))#将机器可读日期转换为元组 加到机器可读日期集合中
human = d