提交 8a23fb1c authored 作者: Brandon T. Willard's avatar Brandon T. Willard 提交者: Thomas Wiecki

Rename theano.tensor.nnet.bn to theano.tensor.nnet.batchnorm

上级 e0e5b3b8
...@@ -48,7 +48,7 @@ from theano.tensor.nnet import ( ...@@ -48,7 +48,7 @@ from theano.tensor.nnet import (
LogSoftmax, LogSoftmax,
Softmax, Softmax,
SoftmaxGrad, SoftmaxGrad,
bn, batchnorm,
conv2d, conv2d,
softmax, softmax,
softmax_op, softmax_op,
...@@ -1869,7 +1869,7 @@ def test_dnn_batchnorm_train(): ...@@ -1869,7 +1869,7 @@ def test_dnn_batchnorm_train():
x_invstd_abstract, x_invstd_abstract,
out_running_mean_abstract, out_running_mean_abstract,
out_running_var_abstract, out_running_var_abstract,
) = bn.batch_normalization_train( ) = batchnorm.batch_normalization_train(
x, x,
scale, scale,
bias, bias,
...@@ -1966,9 +1966,9 @@ def test_dnn_batchnorm_train(): ...@@ -1966,9 +1966,9 @@ def test_dnn_batchnorm_train():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f_abstract.maker.fgraph.toposort() for n in f_abstract.maker.fgraph.toposort()
...@@ -2044,9 +2044,11 @@ def test_dnn_batchnorm_train_without_running_averages(): ...@@ -2044,9 +2044,11 @@ def test_dnn_batchnorm_train_without_running_averages():
out_gpu, x_mean_gpu, x_invstd_gpu = dnn.dnn_batch_normalization_train( out_gpu, x_mean_gpu, x_invstd_gpu = dnn.dnn_batch_normalization_train(
x, scale, bias, "per-activation" x, scale, bias, "per-activation"
) )
out_abstract, x_mean_abstract, x_invstd_abstract = bn.batch_normalization_train( (
x, scale, bias, "per-activation" out_abstract,
) x_mean_abstract,
x_invstd_abstract,
) = batchnorm.batch_normalization_train(x, scale, bias, "per-activation")
# backward pass # backward pass
grads_gpu = theano.grad(None, wrt=[x, scale, bias], known_grads={out_gpu: dy}) grads_gpu = theano.grad(None, wrt=[x, scale, bias], known_grads={out_gpu: dy})
grads_abstract = theano.grad( grads_abstract = theano.grad(
...@@ -2081,9 +2083,9 @@ def test_dnn_batchnorm_train_without_running_averages(): ...@@ -2081,9 +2083,9 @@ def test_dnn_batchnorm_train_without_running_averages():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f_abstract.maker.fgraph.toposort() for n in f_abstract.maker.fgraph.toposort()
...@@ -2113,9 +2115,11 @@ def test_without_dnn_batchnorm_train_without_running_averages(): ...@@ -2113,9 +2115,11 @@ def test_without_dnn_batchnorm_train_without_running_averages():
param_shape = (1, 10, 30, 25) param_shape = (1, 10, 30, 25)
# forward pass # forward pass
out_abstract, x_mean_abstract, x_invstd_abstract = bn.batch_normalization_train( (
x, scale, bias, "per-activation" out_abstract,
) x_mean_abstract,
x_invstd_abstract,
) = batchnorm.batch_normalization_train(x, scale, bias, "per-activation")
# backward pass # backward pass
grads_abstract = theano.grad( grads_abstract = theano.grad(
None, wrt=[x, scale, bias], known_grads={out_abstract: dy} None, wrt=[x, scale, bias], known_grads={out_abstract: dy}
...@@ -2144,9 +2148,9 @@ def test_without_dnn_batchnorm_train_without_running_averages(): ...@@ -2144,9 +2148,9 @@ def test_without_dnn_batchnorm_train_without_running_averages():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f_abstract.maker.fgraph.toposort() for n in f_abstract.maker.fgraph.toposort()
...@@ -2243,7 +2247,7 @@ def test_batchnorm_inference(): ...@@ -2243,7 +2247,7 @@ def test_batchnorm_inference():
x, scale, bias, mean, var, mode, eps x, scale, bias, mean, var, mode, eps
) )
# forward pass, abstract interface # forward pass, abstract interface
out_abstract = bn.batch_normalization_test( out_abstract = batchnorm.batch_normalization_test(
x, scale, bias, mean, var, mode, eps x, scale, bias, mean, var, mode, eps
) )
# reference forward pass # reference forward pass
...@@ -2293,9 +2297,9 @@ def test_batchnorm_inference(): ...@@ -2293,9 +2297,9 @@ def test_batchnorm_inference():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f_abstract.maker.fgraph.toposort() for n in f_abstract.maker.fgraph.toposort()
...@@ -2389,10 +2393,12 @@ def test_dnn_batchnorm_valid_and_invalid_axes(): ...@@ -2389,10 +2393,12 @@ def test_dnn_batchnorm_valid_and_invalid_axes():
invalid_axes_lists = (tuple(range(1, ndim)),) invalid_axes_lists = (tuple(range(1, ndim)),)
for axes in valid_axes_lists + invalid_axes_lists: for axes in valid_axes_lists + invalid_axes_lists:
# forward pass, abstract interface # forward pass, abstract interface
out_train, x_mean, x_invstd = bn.batch_normalization_train( out_train, x_mean, x_invstd = batchnorm.batch_normalization_train(
x, scale, bias, axes x, scale, bias, axes
) )
out_test = bn.batch_normalization_test(x, scale, bias, mean, var, axes) out_test = batchnorm.batch_normalization_test(
x, scale, bias, mean, var, axes
)
# backward pass # backward pass
dy = vartype("dy") dy = vartype("dy")
grads_train = theano.grad( grads_train = theano.grad(
...@@ -2433,9 +2439,9 @@ def test_dnn_batchnorm_valid_and_invalid_axes(): ...@@ -2433,9 +2439,9 @@ def test_dnn_batchnorm_valid_and_invalid_axes():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f.maker.fgraph.toposort() for n in f.maker.fgraph.toposort()
...@@ -2450,9 +2456,9 @@ def test_dnn_batchnorm_valid_and_invalid_axes(): ...@@ -2450,9 +2456,9 @@ def test_dnn_batchnorm_valid_and_invalid_axes():
( (
dnn.GpuDnnBatchNorm, dnn.GpuDnnBatchNorm,
dnn.GpuDnnBatchNormGrad, dnn.GpuDnnBatchNormGrad,
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f.maker.fgraph.toposort() for n in f.maker.fgraph.toposort()
......
...@@ -8,7 +8,7 @@ import theano.tensor as tt ...@@ -8,7 +8,7 @@ import theano.tensor as tt
from tests import unittest_tools as utt from tests import unittest_tools as utt
from theano.configdefaults import config from theano.configdefaults import config
from theano.tensor.math import sum as tt_sum from theano.tensor.math import sum as tt_sum
from theano.tensor.nnet import bn from theano.tensor.nnet import batchnorm
from theano.tensor.type import ( from theano.tensor.type import (
TensorType, TensorType,
matrix, matrix,
...@@ -51,7 +51,7 @@ def test_BNComposite(): ...@@ -51,7 +51,7 @@ def test_BNComposite():
f_ref = theano.function([x, b, g, m, v], [bn_ref_op]) f_ref = theano.function([x, b, g, m, v], [bn_ref_op])
res_ref = f_ref(X, G, B, M, V) res_ref = f_ref(X, G, B, M, V)
for mode in ["low_mem", "high_mem"]: for mode in ["low_mem", "high_mem"]:
bn_op = bn.batch_normalization(x, g, b, m, v, mode=mode) bn_op = batchnorm.batch_normalization(x, g, b, m, v, mode=mode)
f = theano.function([x, b, g, m, v], [bn_op]) f = theano.function([x, b, g, m, v], [bn_op])
res = f(X, G, B, M, V) res = f(X, G, B, M, V)
utt.assert_allclose(res_ref, res) utt.assert_allclose(res_ref, res)
...@@ -79,13 +79,15 @@ def test_batch_normalization(): ...@@ -79,13 +79,15 @@ def test_batch_normalization():
f_ref = theano.function([x, g, b, m, v], [bn_ref_op]) f_ref = theano.function([x, g, b, m, v], [bn_ref_op])
res_ref = f_ref(X, G, B, M, V) res_ref = f_ref(X, G, B, M, V)
for mode in ["low_mem", "high_mem"]: for mode in ["low_mem", "high_mem"]:
bn_op = bn.batch_normalization(x, g, b, m, v, mode=mode) bn_op = batchnorm.batch_normalization(x, g, b, m, v, mode=mode)
f = theano.function([x, g, b, m, v], [bn_op]) f = theano.function([x, g, b, m, v], [bn_op])
res = f(X, G, B, M, V) res = f(X, G, B, M, V)
utt.assert_allclose(res_ref, res) utt.assert_allclose(res_ref, res)
def bn_f(inputs, gamma, beta, mean, std): def bn_f(inputs, gamma, beta, mean, std):
return bn.batch_normalization(inputs, gamma, beta, mean, std, mode=mode) return batchnorm.batch_normalization(
inputs, gamma, beta, mean, std, mode=mode
)
utt.verify_grad(bn_f, [X, G, B, M, V]) utt.verify_grad(bn_f, [X, G, B, M, V])
...@@ -95,7 +97,7 @@ def test_batch_normalization(): ...@@ -95,7 +97,7 @@ def test_batch_normalization():
f_ref = theano.function([x, b, g], [bn_ref_op]) f_ref = theano.function([x, b, g], [bn_ref_op])
res_ref = f_ref(X, G, B) res_ref = f_ref(X, G, B)
for mode in ["low_mem", "high_mem"]: for mode in ["low_mem", "high_mem"]:
bn_op = bn.batch_normalization( bn_op = batchnorm.batch_normalization(
x, x,
g, g,
b, b,
...@@ -108,7 +110,9 @@ def test_batch_normalization(): ...@@ -108,7 +110,9 @@ def test_batch_normalization():
utt.assert_allclose(res_ref, res) utt.assert_allclose(res_ref, res)
def bn_f(inputs, gamma, beta, mean, std): def bn_f(inputs, gamma, beta, mean, std):
return bn.batch_normalization(inputs, gamma, beta, mean, std, mode=mode) return batchnorm.batch_normalization(
inputs, gamma, beta, mean, std, mode=mode
)
utt.verify_grad( utt.verify_grad(
bn_f, [X, G, B, X.mean(axis=0)[np.newaxis], X.std(axis=0)[np.newaxis]] bn_f, [X, G, B, X.mean(axis=0)[np.newaxis], X.std(axis=0)[np.newaxis]]
...@@ -144,7 +148,7 @@ def test_bn_feature_maps(): ...@@ -144,7 +148,7 @@ def test_bn_feature_maps():
res_ref = f_ref(X, G, B, M, V) res_ref = f_ref(X, G, B, M, V)
for mode in ["low_mem", "high_mem"]: for mode in ["low_mem", "high_mem"]:
bn_op = bn.batch_normalization( bn_op = batchnorm.batch_normalization(
x, x,
g.dimshuffle("x", 0, "x", "x"), g.dimshuffle("x", 0, "x", "x"),
b.dimshuffle("x", 0, "x", "x"), b.dimshuffle("x", 0, "x", "x"),
...@@ -157,7 +161,7 @@ def test_bn_feature_maps(): ...@@ -157,7 +161,7 @@ def test_bn_feature_maps():
utt.assert_allclose(res_ref, res) utt.assert_allclose(res_ref, res)
def conv_bn(inputs, gamma, beta, mean, std): def conv_bn(inputs, gamma, beta, mean, std):
return bn.batch_normalization( return batchnorm.batch_normalization(
inputs, inputs,
gamma.dimshuffle("x", 0, "x", "x"), gamma.dimshuffle("x", 0, "x", "x"),
beta.dimshuffle("x", 0, "x", "x"), beta.dimshuffle("x", 0, "x", "x"),
...@@ -196,7 +200,7 @@ def test_batch_normalization_train(): ...@@ -196,7 +200,7 @@ def test_batch_normalization_train():
x_invstd, x_invstd,
out_running_mean, out_running_mean,
out_running_var, out_running_var,
) = bn.batch_normalization_train( ) = batchnorm.batch_normalization_train(
x, x,
scale, scale,
bias, bias,
...@@ -300,9 +304,9 @@ def test_batch_normalization_train(): ...@@ -300,9 +304,9 @@ def test_batch_normalization_train():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f.maker.fgraph.toposort() for n in f.maker.fgraph.toposort()
...@@ -378,19 +382,19 @@ def test_batch_normalization_train_grad_grad(): ...@@ -378,19 +382,19 @@ def test_batch_normalization_train_grad_grad():
continue continue
def bn_grad_wrt_inputs_f(x, dy, scale, x_mean, x_invstd): def bn_grad_wrt_inputs_f(x, dy, scale, x_mean, x_invstd):
g_inputs, g_scale, g_bias = bn.AbstractBatchNormTrainGrad(axes)( g_inputs, g_scale, g_bias = batchnorm.AbstractBatchNormTrainGrad(axes)(
x, dy, scale, x_mean, x_invstd x, dy, scale, x_mean, x_invstd
) )
return g_inputs return g_inputs
def bn_grad_wrt_scale_f(x, dy, scale, x_mean, x_invstd): def bn_grad_wrt_scale_f(x, dy, scale, x_mean, x_invstd):
g_inputs, g_scale, g_bias = bn.AbstractBatchNormTrainGrad(axes)( g_inputs, g_scale, g_bias = batchnorm.AbstractBatchNormTrainGrad(axes)(
x, dy, scale, x_mean, x_invstd x, dy, scale, x_mean, x_invstd
) )
return g_scale return g_scale
def bn_grad_wrt_bias_f(x, dy, scale, x_mean, x_invstd): def bn_grad_wrt_bias_f(x, dy, scale, x_mean, x_invstd):
g_inputs, g_scale, g_bias = bn.AbstractBatchNormTrainGrad(axes)( g_inputs, g_scale, g_bias = batchnorm.AbstractBatchNormTrainGrad(axes)(
x, dy, scale, x_mean, x_invstd x, dy, scale, x_mean, x_invstd
) )
return g_bias return g_bias
...@@ -438,7 +442,7 @@ def test_batch_normalization_train_without_running_averages(): ...@@ -438,7 +442,7 @@ def test_batch_normalization_train_without_running_averages():
param_shape = (1, 10, 30, 25) param_shape = (1, 10, 30, 25)
# forward pass # forward pass
out, x_mean, x_invstd = bn.batch_normalization_train( out, x_mean, x_invstd = batchnorm.batch_normalization_train(
x, scale, bias, "per-activation" x, scale, bias, "per-activation"
) )
# backward pass # backward pass
...@@ -451,9 +455,9 @@ def test_batch_normalization_train_without_running_averages(): ...@@ -451,9 +455,9 @@ def test_batch_normalization_train_without_running_averages():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f.maker.fgraph.toposort() for n in f.maker.fgraph.toposort()
...@@ -508,7 +512,7 @@ def test_batch_normalization_train_broadcast(): ...@@ -508,7 +512,7 @@ def test_batch_normalization_train_broadcast():
running_var_bc = running_var.dimshuffle(params_dimshuffle) running_var_bc = running_var.dimshuffle(params_dimshuffle)
# batch_normalization_train with original, non-broadcasted variables # batch_normalization_train with original, non-broadcasted variables
train_non_bc = bn.batch_normalization_train( train_non_bc = batchnorm.batch_normalization_train(
x, x,
scale, scale,
bias, bias,
...@@ -519,7 +523,7 @@ def test_batch_normalization_train_broadcast(): ...@@ -519,7 +523,7 @@ def test_batch_normalization_train_broadcast():
running_var, running_var,
) )
# batch_normalization_train with broadcasted variables # batch_normalization_train with broadcasted variables
train_bc = bn.batch_normalization_train( train_bc = batchnorm.batch_normalization_train(
x, x,
scale_bc, scale_bc,
bias_bc, bias_bc,
...@@ -534,11 +538,11 @@ def test_batch_normalization_train_broadcast(): ...@@ -534,11 +538,11 @@ def test_batch_normalization_train_broadcast():
) )
# batch_normalization_test with original, non-broadcasted variables # batch_normalization_test with original, non-broadcasted variables
test_non_bc = bn.batch_normalization_test( test_non_bc = batchnorm.batch_normalization_test(
x, scale, bias, running_mean, running_var, axes, eps x, scale, bias, running_mean, running_var, axes, eps
) )
# batch_normalization_test with broadcasted variables # batch_normalization_test with broadcasted variables
test_bc = bn.batch_normalization_test( test_bc = batchnorm.batch_normalization_test(
x, scale_bc, bias_bc, running_mean_bc, running_var_bc, axes, eps x, scale_bc, bias_bc, running_mean_bc, running_var_bc, axes, eps
) )
...@@ -588,7 +592,9 @@ def test_batch_normalization_test(): ...@@ -588,7 +592,9 @@ def test_batch_normalization_test():
continue continue
# forward pass # forward pass
out = bn.batch_normalization_test(x, scale, bias, mean, var, axes, eps) out = batchnorm.batch_normalization_test(
x, scale, bias, mean, var, axes, eps
)
# reference forward pass # reference forward pass
if axes == "per-activation": if axes == "per-activation":
axes2 = (0,) axes2 = (0,)
...@@ -619,9 +625,9 @@ def test_batch_normalization_test(): ...@@ -619,9 +625,9 @@ def test_batch_normalization_test():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f.maker.fgraph.toposort() for n in f.maker.fgraph.toposort()
...@@ -660,10 +666,10 @@ def test_batch_normalization_broadcastable(): ...@@ -660,10 +666,10 @@ def test_batch_normalization_broadcastable():
) )
# forward pass # forward pass
out_train, x_mean, x_invstd = bn.batch_normalization_train( out_train, x_mean, x_invstd = batchnorm.batch_normalization_train(
x, scale, bias, "spatial" x, scale, bias, "spatial"
) )
out_test = bn.batch_normalization_test(x, scale, bias, mean, var, "spatial") out_test = batchnorm.batch_normalization_test(x, scale, bias, mean, var, "spatial")
# backward pass # backward pass
grads_train = tt.grad(None, wrt=[x, scale, bias], known_grads={out_train: dy}) grads_train = tt.grad(None, wrt=[x, scale, bias], known_grads={out_train: dy})
grads_test = tt.grad(None, wrt=[x, scale, bias], known_grads={out_test: dy}) grads_test = tt.grad(None, wrt=[x, scale, bias], known_grads={out_test: dy})
...@@ -677,9 +683,9 @@ def test_batch_normalization_broadcastable(): ...@@ -677,9 +683,9 @@ def test_batch_normalization_broadcastable():
isinstance( isinstance(
n.op, n.op,
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
), ),
) )
for n in f.maker.fgraph.toposort() for n in f.maker.fgraph.toposort()
......
...@@ -179,7 +179,7 @@ from theano.tensor.basic import ( ...@@ -179,7 +179,7 @@ from theano.tensor.basic import (
Tri, Tri,
) )
from theano.tensor.math import MaxAndArgmax from theano.tensor.math import MaxAndArgmax
from theano.tensor.nnet import bn, conv3d2d from theano.tensor.nnet import batchnorm, conv3d2d
from theano.tensor.nnet.abstract_conv import ( from theano.tensor.nnet.abstract_conv import (
AbstractConv2d, AbstractConv2d,
AbstractConv2d_gradInputs, AbstractConv2d_gradInputs,
...@@ -3122,9 +3122,9 @@ register_opt("fast_compile")(abstract_batch_norm_groupopt) ...@@ -3122,9 +3122,9 @@ register_opt("fast_compile")(abstract_batch_norm_groupopt)
register_opt("fast_compile", name="abstract_batch_norm_db")(abstract_batch_norm_db) register_opt("fast_compile", name="abstract_batch_norm_db")(abstract_batch_norm_db)
register_opt2( register_opt2(
[ [
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
], ],
"fast_compile", "fast_compile",
name="abstract_batch_norm_db2", name="abstract_batch_norm_db2",
...@@ -3132,19 +3132,19 @@ register_opt2( ...@@ -3132,19 +3132,19 @@ register_opt2(
for op, fct, cpu in [ for op, fct, cpu in [
( (
bn.AbstractBatchNormTrain, batchnorm.AbstractBatchNormTrain,
local_abstract_batch_norm_train_cudnn, local_abstract_batch_norm_train_cudnn,
bn.local_abstract_batch_norm_train, batchnorm.local_abstract_batch_norm_train,
), ),
( (
bn.AbstractBatchNormTrainGrad, batchnorm.AbstractBatchNormTrainGrad,
local_abstract_batch_norm_train_grad_cudnn, local_abstract_batch_norm_train_grad_cudnn,
bn.local_abstract_batch_norm_train_grad, batchnorm.local_abstract_batch_norm_train_grad,
), ),
( (
bn.AbstractBatchNormInference, batchnorm.AbstractBatchNormInference,
local_abstract_batch_norm_inference_cudnn, local_abstract_batch_norm_inference_cudnn,
bn.local_abstract_batch_norm_inference, batchnorm.local_abstract_batch_norm_inference,
), ),
]: ]:
lifter = op_lifter([op])(fct) lifter = op_lifter([op])(fct)
......
...@@ -40,7 +40,7 @@ from theano.tensor.nnet.basic import ( ...@@ -40,7 +40,7 @@ from theano.tensor.nnet.basic import (
softmax_with_bias, softmax_with_bias,
softsign, softsign,
) )
from theano.tensor.nnet.bn import batch_normalization from theano.tensor.nnet.batchnorm import batch_normalization
from theano.tensor.nnet.sigm import ( from theano.tensor.nnet.sigm import (
hard_sigmoid, hard_sigmoid,
scalar_sigmoid, scalar_sigmoid,
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论