Source code for bigdl.keras.ToBigDLHelper

#
# Copyright 2016 The BigDL Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

from math import ceil

import bigdl.nn.initialization_method as BInit
from bigdl.optim.optimizer import L1L2Regularizer as BRegularizer


[docs]def to_bigdl_2d_ordering(order): if order == "tf": return "NHWC" elif order == "th": return "NCHW" else: raise Exception("Unsupported dim_ordering: %s" % order)
[docs]def to_bigdl_3d_ordering(order): if order == "tf": return "channel_last" elif order == "th": return "channel_first" else: raise Exception("Unsupported dim_ordering: %s" % order)
[docs]def to_bigdl_3d_padding(border_mode): if border_mode == "valid": return 0, 0, 0 elif border_mode == "same": return -1, -1, -1 else: raise Exception("Unsupported border mode: %s" % border_mode)
def __calculate_2d_same_padding(x, kx, dx, dilation_x): return int(ceil((x * (dx - 1) + dilation_x * (kx - 1) - dx + 1) / 2))
[docs]def to_bigdl_2d_padding(border_mode, *args): if border_mode == "same": if len(args) == 0: # if -1 for same padding is supported return -1, -1 # calculate padding by given parameters elif len(args) == 4: # used by 1d layers constructed from 2d, just need one pad h, kh, dh, dilation_h = args pad_h = __calculate_2d_same_padding(h, kh, dh, dilation_h) return pad_h, 0 elif len(args) == 8: h, kh, dh, dilation_h, w, kw, dw, dilation_w = args pad_h = __calculate_2d_same_padding(h, kh, dh, dilation_h) pad_w = __calculate_2d_same_padding(w, kw, dw, dilation_w) return pad_h, pad_w elif border_mode == "valid": return 0, 0 else: raise Exception("Unsupported border mode: %s" % border_mode)
[docs]def to_bigdl_init(kinit_method): # kinit_method is a string init = None if kinit_method == "glorot_uniform": init = BInit.Xavier() elif kinit_method == "one": init = BInit.Ones() elif kinit_method == "zero": init = BInit.Zeros() elif kinit_method == "uniform": init = BInit.RandomUniform(lower=-0.05, upper=0.05) elif kinit_method == "normal": init = BInit.RandomNormal(mean=0.0, stdv=0.05) else: raise Exception("Unsupported init type: %s" % kinit_method) return init
[docs]def to_bigdl_reg(reg): # reg is a dict if reg: return BRegularizer(reg['l1'], reg['l2']) else: return None