MXNet入门

按照官网60分钟入门 Gluon 来学的。

ndarray

定义

  1. 手打普通数组: nd.array(((1,2,3),(5,6,7)))
  2. 自动填充: nd.ones((2,3))
  3. 随机填充: nd.random.uniform(-1,1,(2,3))
  4. 指定数组填充: nd.full((2,3),2.0)

ndarray也有属性:

In: (X.shape, X.size, X.dtype)
out: ((2,3), 6, numpy.float32)

实际发现每次random第一次都一样,也就是种子的一样的

运算


  1. element-wise 乘:x*y
  2. 指数: x.exp()
  3. 转置: x.T ===>尽然是属性?
  4. 矩阵乘:nd.dot(x,y.T)
  5. 下标索引: x[1,2]
  6. 获取y所有行,第二三列: y[:,1:3] ===>这个竟然是可以当左值的

y[:,1:3] = 2
y
[[0.09762704 2. 2.]
[0.68853152 2. 2.]]

创建神经网络

创建一个层

from mxnet import nd
from mxnet.gluon import nn

#创建一个输出为2的全连接层,输入未指定
layer = nn.Dense(2)
layer.initialize()

x = nd.random.uniform(-1,1,(3,4))
#正向传播
layer(x)

创建一个网络

net = nn.Sequential()
with net.name_scope():
    # Add a sequence of layers.
    net.add(
    nn.Conv2D(channels=6, kernel_size=5, activation='relu'),
    nn.MaxPool2D(pool_size=2, strides=2),
    nn.Conv2D(channels=16, kernel_size=3, activation='relu'),
    nn.MaxPool2D(pool_size=2, strides=2),
    # 降维,后跟全连接
    nn.Flatten(),
    nn.Dense(120, activation="relu"),
    nn.Dense(84, activation="relu"),
    nn.Dense(10)
    )

net.initialize()

x = nd.random.uniform(shape=(4,1,28,28))
y = net(x)

===========================================================
这个with怎么这么用?
见:https://blog.csdn.net/bitcarmanlee/article/details/52745676
这里的作用是赋予独一无二的名字

===========================================================

用autograd自动微分

from mxnet import nd
from mxnet import autograd

x = nd.array([[1, 2], [3, 4]])

#attach_grad 之后才能用 分配空间
x.attach_grad()


x.grad
[[0. 0.]
 [0. 0.]]

with autograd.record():
    y = 2 * x * x

y.backward()
x.grad
[[ 4. 8.]
[ 12. 16.]]

===========================================================
这就自动微分了?我大caffe咋啥都要自己写?
见: https://blog.csdn.net/aws3217150/article/details/70214422

===========================================================

训练

都还好,没啥写的。其中acc函数挺有意思的,见acc.

猜你喜欢

转载自blog.csdn.net/love_wanling/article/details/81070775
今日推荐