Code Monkey home page Code Monkey logo

trickygo / dive-into-dl-tensorflow2.0 Goto Github PK

View Code? Open in Web Editor NEW
3.7K 104.0 820.0 59.81 MB

本项目将《动手学深度学习》(Dive into Deep Learning)原书中的MXNet实现改为TensorFlow 2.0实现,项目已得到李沐老师的认可

Home Page: https://trickygo.github.io/Dive-into-DL-TensorFlow2.0/#/

License: Apache License 2.0

Jupyter Notebook 99.59% Python 0.41%
deep-learning python3 dive-into-deep-learning tensorflow2 jupyter-notebook nlp cv tutorials chinese-simplified book

dive-into-dl-tensorflow2.0's Introduction

封面

本项目《动手学深度学习》 原书中MXNet代码实现改为TensorFlow2实现。经过archersama的导师咨询李沐老师,这个项目的实施已得到李沐老师的同意。原书作者:阿斯顿·张、李沐、扎卡里 C. 立顿、亚历山大 J. 斯莫拉以及其他社区贡献者,GitHub地址:https://github.com/d2l-ai/d2l-zh

此书的版本存在一些不同,本项目主要针对此书的中文版进行TensorFlow2重构。另外,本项目也参考了对此书中文版进行PyTorch重构的项目Dive-into-DL-PyTorch,在此表示感谢。

现已更新到十章,持续更新中。。。

项目已被机器之心等多家公众号报导,并且受到原作者李沐的认可

简介

本仓库主要包含code和docs两个文件夹(外加一些数据存放在data中)。其中code文件夹就是每章相关jupyter notebook代码(基于TensorFlow2);docs文件夹就是markdown格式的《动手学深度学习》书中的相关内容,然后利用docsify将网页文档部署到GitHub Pages上,由于原书使用的是MXNet框架,所以docs内容可能与原书略有不同,但是整体内容是一样的。欢迎对本项目做出贡献或提出issue。

面向人群

本项目面向对深度学习感兴趣,尤其是想使用TensorFlow2进行深度学习的童鞋。本项目并不要求你有任何深度学习或者机器学习的背景知识,你只需了解基础的数学和编程,如基础的线性代数、微分和概率,以及基础的Python编程。

食用方法

方法一

本仓库包含一些latex公式,但github的markdown原生是不支持公式显示的,而docs文件夹已经利用docsify被部署到了GitHub Pages上,所以查看文档最简便的方法就是直接访问本项目网页版。当然如果你还想跑一下运行相关代码的话还是得把本项目clone下来,然后运行code文件夹下相关代码。

方法二

你还可以在本地访问文档,先安装docsify-cli工具:

npm i docsify-cli -g

然后将本项目clone到本地:

git clone https://github.com/TrickyGo/Dive-into-DL-TensorFlow2.0
cd Dive-into-DL-TensorFlow2.0

然后运行一个本地服务器,这样就可以很方便的在http://localhost:3000实时访问文档网页渲染效果。

docsify serve docs

Contributors ✨

这个项目的发起人及主要贡献者如下


archersama

💻(leader)

TrickyGo

💻

SwordFaith

💻

ShusenTang

💻

LIANGQINGYUAN

💻

目录

持续更新中......

原书地址

中文版:动手学深度学习 | Github仓库
English Version: Dive into Deep Learning | Github Repo

引用

如果您在研究中使用了这个项目请引用原书:

@book{zhang2019dive,
    title={Dive into Deep Learning},
    author={Aston Zhang and Zachary C. Lipton and Mu Li and Alexander J. Smola},
    note={\url{http://www.d2l.ai}},
    year={2019}
}

dive-into-dl-tensorflow2.0's People

Contributors

archersama avatar connorsixiong avatar jacky-ch93 avatar kpol-lgx avatar liangqingyuan avatar naah69 avatar shusentang avatar skyexu avatar swordfaith avatar trickygo avatar xiaoye-hua avatar yasoz avatar youngxhui avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dive-into-dl-tensorflow2.0's Issues

10.3

10.3word2vec-tensorflow2.md里面的第三块‘读取数据’ `构造的Dataset类为什么继承的父类是torch模块里的,另外文章里也并没有引入torch模块,而且这应该是由tensorflow2实现的,不应该使用torch模块吧

torch库在前面没有 导入(3.11.4.1)

3.11.4.1 生成数据集
该小节,torch库在前面没有 导入,我是在本地安装了Pytorch,然后import torch,就可以成功了。

n_train, n_test, true_w, true_b = 100, 100, [1.2, -3.4, 5.6], 5
features = torch.randn((n_train + n_test, 1))
poly_features = torch.cat((features, torch.pow(features, 2), torch.pow(features, 3)), 1)
labels = (true_w[0] * poly_features[:, 0] + true_w[1] * poly_features[:, 1]
+ true_w[2] * poly_features[:, 2] + true_b)
labels += torch.tensor(np.random.normal(0, 0.01, size=labels.size()), dtype=torch.float)

7.3.3有一处笔误

简洁实现那里,train_pytorch_ch7中的pytorch应该是tensorflow2
还有函数定义中的trainer是指的trainer_name吗?

3.13节,train_ch3,params更新

        if trainer is None:

            sample_grads = grads
            params[0].assign_sub(grads[0] * lr)
            params[1].assign_sub(grads[1] * lr)

为什么params只更新0,1,不应该是
for (i,param) in enumerate(params):
params[i].assign_sub(grads[i]*lr)

3.15.2有误

3.15.2还是针对PyTorch的,未针对tf作修改,可以去了解一下tf2.0的初始化策略然后更新一下

【3.3 线性回归的简洁实现】内容排版问题

多余代码

  • 第一行代码多余,可以删去;
  • for 循环中的 x 原书为 大写 X
  • 原书代码结尾有 break,这样只会输出一个,可以减少该代码输出后所在内容篇幅。
# dataset=tf.data.Dataset.from_tensor_slices((features,labels))
train_db = tf.data.Dataset.from_tensor_slices((features, labels)).batch(10)
for(x,y) in train_db:
    print(x,y)

为划分标题

该章节目前没有划分小标题。

章节优化器和损失函数在同一章节划分

可以和原书一致,将损失函数和优化器分别定义使用。

学习率数值

下面代码原书的学习率采取为 0.03 。

model.compile(optimizer=tf.keras.optimizers.SGD(0.01),
              loss='mse')

大部分段落没有句号

最后多余一个代码块

文章结尾多余一个代码块

image

3.16.3 转换为nparray的时候使用的是pytorch的api

n_train = train_data.shape[0]
train_features = torch.tensor(all_features[:n_train].values, dtype=torch.float)
test_features = torch.tensor(all_features[n_train:].values, dtype=torch.float)
train_labels = torch.tensor(train_data.SalePrice.values, dtype=torch.float).view(-1, 1)

5.4.2中最后一个例子,结果问题

最后一个例子使用了padding='same', strides=2。理论上在kernel_shape=(3,3) 的情况下same padding就是在图像外面围一圈0。
然后再做strides=2的max_pooling。这个时候结果不应该是5 7 13 15么?为什么最后的结果是10 11 14 15?

动手学深度学习 tensorflow版

Hi 各位,

感谢将D2L翻译到TensorFlow。目前我们在着手在d2l.ai的英文版里面加入tensorflow和pytorch的实现。现在的pytorch版的一个demo在http://pytorch.d2l.ai.s3-website-us-west-2.amazonaws.com/chapter_preface/index.htmlhttp://pytorch.d2l.ai.s3-website-us-west-2.amazonaws.com/chapter_linear-networks/linear-regression-scratch.html,代码在 https://github.com/d2l-ai/d2l-en/tree/pytorch 不知道你有没有兴趣来贡献tensorflow的实现。

(我之前发过信到各位的pku邮箱,各位可能没注意)

6.4网页版和github上面的结果不一致

github
网页版
6.4网页版和github上面的结果不一致,代码一致,疑惑,另外6.3vocab_size实际2582,网页版和github上面是1027,如果上述有描述错误,望指教。

建议

感觉有些地方都没改正过来 新手看的一头雾水 建议再好好完善一下

2.3.2 训练模式和预测模式 有 关键性错误

with tf.GradientTape(persistent=True) as g:
    g.watch(x)
    y = x * x
    z = y * y
    dz_dx = g.gradient(z, x)  # 108.0 (4*x^3 at x = 3)
    dy_dx = g.gradient(y, x)  # 6.0
dz_dx,dy_dx

需要改为:

with tf.GradientTape(persistent=True) as g:
    g.watch(x)
    y = x * x
    z = y * y
dz_dx = g.gradient(z, x)  # 108.0 (4*x^3 at x = 3)
dy_dx = g.gradient(y, x)  # 6.0
dz_dx,dy_dx

编写规范建议

  1. 需要将一些专有名词规范话,例如:
  • tensorflow or Tensorflow
  • tensor or Tensor
  1. 单词与汉字之间,数字与汉字之间是否要保留空格,例如:
  • Tensorflow是一个 or Tensorflow 是一个
  1. 行内代码是否要专门括起来,原书是括起来的,例如:
  • tensor or tensor

6.4 和 6.5 小结中,损失函数缺少一个参数,导致训练结果不正确

l = tf.reduce_mean(tf.losses.sparse_categorical_crossentropy(y,outputs))
该损失函数缺少参数 from_logits = True。在计算输出是没有使用激活函数softmax,因此需要在损失函数上指定,即令from_logits = True。故损失函数应该为:
l = tf.reduce_mean(tf.losses.sparse_categorical_crossentropy(y,outputs,from_logits=True))

错误结果:

epoch 50, perplexity 100.705286, time 1.76 sec
分开

  • 分开
    不分开
  • 不分开
    epoch 100, perplexity 27.005527, time 1.85 sec
    分开
  • 分开
    不分开
  • 不分开 我
    epoch 150, perplexity 1019.865201, time 1.80 sec
    分开
  • 分开象元元乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘
    不分开
  • 不分开元元乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘
    epoch 200, perplexity 1020.654544, time 1.73 sec
    分开
  • 分开象元元乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘
    不分开
  • 不分开元元乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘
    epoch 250, perplexity 1020.654544, time 1.75 sec
    分开
  • 分开象元元乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘
    不分开
  • 不分开元元乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘乘

module 'tensorflow' has no attribute 'gradient'

线性回归的从零开始实现一节

param.assign_sub(lr * tf.gradient(l, param) / batch_size)

代码报module 'tensorflow' has no attribute 'gradient'错误,改tf.gradient为t.gradient正常

是否更新

请问后面的内容是否会更新了呢?或者大概什么时间会更新?感谢

5.12 稠密连接网络 DenseNet 模型

在一开始5.12.1中代码所定义的稠密块有两层卷积,而在5.12.3的代码中

def densenet():
    return DenseNet(num_init_features=64, growth_rate=32, block_layers=[4,4,4,4], compression_rate=0.5, drop_rate=0.5)
mynet=densenet()

定义了block_layers[4,4,4,4], 所以实际上代码最后定义的模型是不是4x4x2个卷积层,而不是像上文所提到的

同ResNet一样,我们可以设置每个稠密块使用多少个卷积层。这里我们设成4,从而与上一节的ResNet-18保持一致

或者还是我理解错了啊

3.5 读取小批量 像素标准化

3.5 读取小批量
并除以255使得所有像素的数值均在0到1之间
应该加一个 map函数作映射
def data_trans(x, y):
x = tf.cast(x, tf.float32)
x = x / 255
return x, y

train_iter = tf.data.Dataset.from_tensor_slices((x_train, y_train)).map(data_trans).batch(256)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.