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
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