示例#1
0
def test_conv_and_max_pooling():
    # 测试卷积和最大池化
    z = np.random.randn(3, 3, 28, 28).astype(np.float)
    K = np.random.randn(3, 4, 3, 3).astype(np.float) * 1e-3
    b = np.zeros(4).astype(np.float)

    next_z = conv_forward(z, K, b)
    y_pred = max_pooling_forward_bak(next_z, pooling=(2, 2))
    y_true = np.ones_like(y_pred)

    from nn.losses import mean_squared_loss
    for i in range(10000):
        # 前向
        next_z = conv_forward(z, K, b)
        y_pred = max_pooling_forward_bak(next_z, pooling=(2, 2))
        # 反向
        loss, dy = mean_squared_loss(y_pred, y_true)
        next_dz = max_pooling_backward_bak(dy, next_z, pooling=(2, 2))
        dK, db, _ = conv_backward(next_dz, K, z)
        K -= 0.001 * dK
        b -= 0.001 * db

        if i % 10 == 0:
            print("i:{},loss:{},mindy:{},maxdy:{}".format(i, loss, np.mean(dy), np.max(dy)))

        if np.allclose(y_true, y_pred):
            print("yes")
            break
示例#2
0
def test_conv():
    # 测试卷积
    z = np.random.randn(3, 3, 28, 28).astype(np.float)
    K = np.random.randn(3, 4, 3, 3).astype(np.float) * 1e-3
    b = np.zeros(4).astype(np.float)

    next_z = conv_forward(z, K, b)
    y_true = np.ones_like(next_z)

    from nn.losses import mean_squared_loss
    for i in range(10000):
        # 前向
        next_z = conv_forward(z, K, b)
        # 反向
        loss, dy = mean_squared_loss(next_z, y_true)
        dK, db, _ = conv_backward(dy, K, z)
        K -= 0.001 * dK
        b -= 0.001 * db

        if i % 10 == 0:
            print("i:{},loss:{},mindy:{},maxdy:{}".format(i, loss, np.mean(dy), np.max(dy)))

        if np.allclose(y_true, next_z):
            print("yes")
            break