| CARVIEW |
??6??@?J?X?^?}?C?Y???邽?߂́ATensorFlow 2.0?ŐV?̏??????????FTensorFlow 2?{Keras?itf.keras?j????
TensorFlow 2.0?ȍ~?ł́u?T?u?N???X???v?Ƃ?????{?p?^?[???ɏ]???ĊȒP?ɃJ?X?^?}?C?Y???ł???B???̑S?J?X?^?}?C?Y???@???Љ?A?Ō??tf.estimator??????API?ɂ??Ă????y????B
???̋L???͉??????ł??B????o?^?i?????j????ƑS?Ă????????????܂??B
?@?O?X?????O???́ATensorFlow 2.x?i2.0?ȍ~?j?̏???????????????B???ɑS3???4?ʂ?̏???????????ς݂????A??{?͂????ŏC???ł???B
?@????́A???p?҂Ƃ??Ďc??2?̏????????Љ??B???r????}?A?R?[?h???X?g?̔ԍ??͑O??̑????ԍ??Ƃ??Ă???i?O?X??E?O??E????́A?藣?????A?ЂƂ܂Ƃ܂?̋L???Ƃ??ēǂ?łق??????ߘA?????????????Ă???j?B
????̓??e?ƕ??j?ɂ???
?@TensorFlow?̃????b?g?́A???S?Ҍ???????G?L?X?p?[?g?????܂ł??܂??܂ȏ????????p?ӂ???Ă???A?N?ł??ȒP?Ɋw??Ŏg?????Ȃ??邾???łȂ??A?K?v?ɉ????ĉ??p???W?I?Ȏ??????\?Ȃ??Ƃł???B
?@?t?ɁA???̃????b?g???f?????b?g?ł?????A?l?ɂ???ď????????傫???Ⴄ???ƂƂȂ?A???S?҂??猩??Ɨ????̖W???ɂȂ?₷???B?Ⴆ??TensorFlow?̌????`???[?g???A????h?L???????g?A?l?b?g??^GitHub??̃T???v???R?[?h??????ƁA???ɂ??܂??܂ȏ????????Ȃ???Ă???B
?@????ɔ??Ԃ???????̂??ATensorFlow 1.x????̃R?[?h?ł???i?Ⴆ?A??????̋L????1.x????̃R?[?h?j?B1.x????́ATensorFlow???C?u???????ɂ??܂??܂ȍ?????API???????????B2.0?ɂȂ????i?K?ŁA??????API?̂قƂ?ǂ??p?~????Atf.keras??tf.estimator?Ƃ???2?݂̂???????API?Ƃ??Ďc?????B???̂悤??1.x????2.x?ւƈڍs?????i?K?ő?ϊv???N???Ă???B?l?b?g??ɂ́A?????2.x?x?[?X?̃R?[?h???????Ă??????낤???A?ˑR?Ƃ???1.x????̃R?[?h????ʂɎc???Ă??邽?߁ATensorFlow?̃R?[?h?Ɋւ??????⍬????Ԃ͂??炭???????낤?i?ƕM?҂͗\?z???Ă???j?B
?@???????????_?܂??A?????Ė{?A?ڂ̓ǎ҃^?[?Q?b?g?ł???u?f?B?[?v???[?j???O???S?Ҍ????v??z?肵?āATensorFlow 2.x????̏???????????܂ł̑S3??ł܂Ƃ߂Ă???B?S?Ă̏????????u?}?X?^?[???Ăق????v?Ƃ????Ӑ}?ł͂Ȃ??A?m???Ƃ??ď??????̃o???G?[?V??????m???Ă??炤???ƂŁA???S?҂ł??u???E???ɂ???h?L???????g??T???v???R?[?h???˘f?킸?ɓǂ߂?悤?ɂȂ??Ăق????v?Ƃ????̂??Ӑ}?ł???B
?@????́A?j???[?????l?b?g???[?N?̃??f???v?`?w?K?`?]???܂ł??t???J?X?^?}?C?Y??????@???Љ??B
?@??????????́i?J??Ԃ??ɂȂ邪?j?u?}?X?^?[???Ăق????v?Ƃ????킯?ł͂Ȃ??A?u?m???Ƃ??Ēm???Ă????Ăق????v?Ƃ????̂??ړI?ł???B????č???͏????????A?????ƏЉ??ɂƂǂ߁A??̓I?ȉ???͊???????B???Ƃ??R?[?h?̒??g????????Ȃ??Ă??C?ɂ????A?{???ɕK?v?ɂȂ??Ă???{?e?̓??e???ēǂ????肵?āA?{???̃t???J?X?^?}?C?Y?????H????悢?B
?@?܂??A???S?҂??????@?\?͊?{?I?Ƀ??C?u???????ɑ??݂???̂ŁA?܂??͂????T????悤?ɁA?????@?\?̏????ӏ??????Œ???B?g?ԗւ̍Ĕ????h??????K?v?͂Ȃ??̂ŁA???H?ł͂܂??????@?\???m???Ƀ`?F?b?N????悤?ɂ??Ăق????B
?R?[?h?̏??????????s???邽?߂̏???
?O?????
?@??????O?X??^?O??Ɉ????????APython?i?o?[?W????3.6?j?ƁA?f?B?[?v???[?j???O?̃??C?u?????uTensorFlow?v?̍ŐV??2.1?𗘗p????B?܂??A?J??????Google Colaboratory?i?ȉ??AColab?j??p????B
?@?O??????̏????͑O?X??^?O??Ɠ????Ȃ̂ŁA??????????????B?ڂ?????Colab?̃m?[?g?u?b?N???m?F???Ăق????B
?@????ł͏????????????Ƃ??āA?i5?j?̏?????????????Ă??????B
?i5?jTensorFlow?ᐅ??API?ŃJ?X?^???????mTensorFlow Low-level API?n
?@TensorFlow 2.x?Ńt???J?X?^?}?C?Y???s???ꍇ?A?J?X?^?}?C?Y?̃x?[?X?ƂȂ?̂??A?O???????????i4?jSubclassing?i?T?u?N???X???j???f???ł???B???̏??????ł́Atf.keras.Model?N???X???T?u?N???X?????ēƎ??̃??f?????쐬?????B????́A?u???f?????J?X?^?}?C?Y?????v?ƌ??邱?Ƃ??ł???B???ꂪTensorFlow 2.x????̃J?X?^?}?C?Y?̊?{?p?^?[???ł???B
??{?p?^?[??
?@TensorFlow 2.x?ł́A
- ?????????F tf.keras.layers.Layer?N???X???T?u?N???X??
- ???C???[?F tf.keras.layers.Layer?N???X???T?u?N???X??
- ?I?v?e?B?}?C?U?i?œK???A???S???Y???j?F tf.keras.optimizers.Optimizer?N???X???T?u?N???X??
- ???????F tf.keras.losses.Loss?N???X???T?u?N???X??
- ?]?????F tf.keras.metrics.Metric?N???X???T?u?N???X??
?Ȃǂ̋@?\???J?X?^?}?C?Y?\?ł???i?}5-1?j?B
?@??L?̉ӏ??????Ɏ??????悤?ɁA??????????炩?̃N???X???T?u?N???X?????邱?ƂŎ????ł???B???ꂪ?{?e?œ`???????u?t???J?X?^?}?C?Y?̖{???v?ł???B?T?u?N???X???̒??Ŏ??????ׂ??????o?[???\?b?h?͏??????قȂ?̂ŁA?ȉ??ł͂????????Ă????B
?????????̃J?X?^??????
?@?܂??́A?????????̊????@?\???m?F???悤?B
?@TensorFlow 2.x?̊????????́AKeras?R????API?ƁATensorFlow?R????API??2??ނ?????B???ɏ[?????Ă???̂ŁA?J?X?^?????????s???K?v???͂قƂ?ǔ??????Ȃ??͂??ł???B??̓I?ɂ͈ȉ??̂??̂?????B
?yKeras?R???z
- 'sigmoid'?F tf.keras.activations.sigmoid()??
- 'hard_sigmoid'?F tf.keras.activations.hard_sigmoid()??
- 'tanh'?F tf.keras.activations.tanh()??
- 'relu',?F tf.keras.activations.relu()??
- 'elu'?F tf.keras.activations.elu()??
- 'selu'?F tf.keras.activations.selu()??
- 'swish'?F tf.keras.activations.swish()??
- 'softsign'?F tf.keras.activations.softsign()??
- 'softplus'?F tf.keras.activations.softplus()??
- 'softmax'?F tf.keras.activations.softmax()??
- 'linear'?F tf.keras.activations.linear()??
- 'exponential'?F tf.keras.activations.exponential()??
?yTensorFlow?R???z
- tf.nn.sigmoid()??
- tf.nn.tanh()??
- tf.nn.relu()??
- tf.nn.relu6()??
- tf.nn.leaky_relu()??
- tf.nn.elu()??
- tf.nn.selu()??
- tf.nn.swish()??
- tf.nn.softsign()??
- tf.nn.softplus()??
- tf.nn.softmax()??
?@?O?X???????????A
- Sequential???f???i???X?g1-1?^2-1?j?ł?'tanh'?Ƃ??????????
- Functional API?i???X?g3-1?j??Subclassing???f???i???X?g4-1?j?ł?tf.keras.layers.Activation?N???X??
?g?p?????B?????̑???ɁAtf.keras.activations.tanh()????tf.nn.tanh()?????g?p???邱?Ƃ??\?ł???B
?@?????̊????????₻?̃T?u?N???X???ɂ??ďڂ????͉??L?̃????N????Q?Ƃ??Ăق????B
- ?????h?L???????g?uModule: tf.keras.activations | TensorFlow Core v2.x?v
- ?????h?L???????g?uModule: tf.nn | TensorFlow Core v2.x?v
- ?????h?L???????g?utf.keras.layers.Activation | TensorFlow Core v2.x?v
?@?ȏ??T???Ă??ړI?̊???????????????Ȃ??ꍇ?́A???̂悤?ɂ??ăJ?X?^???i?Ǝ??j?̂??̂??쐬???邱?Ƃ??\???i???X?g5-1?j?B
# ?J?X?^???̊?????????Python????????
def custom_activation(x):
return (tf.exp(x)-tf.exp(-x))/(tf.exp(x)+tf.exp(-x))
# ?J?X?^???̊????????N???X???????i???C???[?̃T?u?N???X???j
# ?itf.keras.layers.Activation()?̑???j
class CustomActivation(tf.keras.layers.Layer):
def __init__(self, **kwargs):
super(CustomActivation, self).__init__(**kwargs)
def call(self, inputs):
return custom_activation(inputs)
?@tf.keras.layers.Layer?N???X???T?u?N???X?????āA?Ǝ???CustomActivation?N???X?????????Ă???i???O????????????f???̃T?u?N???X???Ɣ??Ɏ??Ă?????@?ł??邱?ƂɋC?t?????낤?j?B?N???X?????̃????o?[???\?b?h?͈ȉ??̂悤?ɂȂ??Ă???B
- __init__()???\?b?h?F ??????????
- call()???\?b?h?F ?????????̏???
?@tf.keras.layers.Layer?N???X?̃T?u?N???X???ɂ??Ă??ڂ????́A
- ?????h?L???????g?utf.keras.layers.Layer | TensorFlow Core v2.x?v
???Q?Ƃ??Ăق????i???y?[?W?????usubclass?v?Ō???????Ƃ悢?j?B
?@???X?g5-1?ł́A??????????Python???icustom_activation()???j?Ƃ??Đ?o?????ƂŁAtf.keras.activations.tanh()????tf.nn.tanh()???Ɠ????悤?Ȋ??o?ł??g????悤?ɂ????????????A???????call()???\?b?h???ɒ??ڎ??????Ă??悢?B
?@?܂??Acustom_activation()???̒??ł́Atf.exp()????+-/?Ƃ??????l?????Z???L?ڂ???Ă???i???Ȃ??A???̈????ɓn?????x?́ATensorFlow?e???\???ł???j?B???̂悤?ɐ??w?v?Z?́A??{?I?ɂ?NumPy?Ɠ????悤?ɍs????B??????????tf.xxx?Ƃ??????≉?Z?q??TensorFlow?ᐅ??API?ƌĂ??B???ꂼ??ڂ????͉??L?̃h?L???????g???Q?Ƃ??Ăق????B
- ???w???̌????h?L???????g?uModule: tf.math | TensorFlow Core v2.x?v
- ???Z?q?̌????h?L???????g?utf.Tensor | TensorFlow Core v2.x?v
?@???X?g5-1?ł́ATensorFlow?ᐅ??API?ŋL?q???????AKeras backend API???g?????Ƃ??ł???Btf.keras?ł͂Ȃ??A?X?^???h?A????Keras???g???ꍇ?́AKeras backend API???g?????ƂɂȂ?i???X?g5-2?j?B
import tensorflow.keras.backend as K
# ?J?X?^???̊?????????Python????????
def custom_activation(x):
return (K.exp(x)-K.exp(-x))/(K.exp(x)+K.exp(-x))
# ?c?c?Ǝ??N???X?̎????͓????Ȃ̂Ŋ????c?c
?@?ƌ????Ă??A???X?g5-1??5-2???r????ƕ?????悤?ɁA?قړ????R?[?h?ƂȂ?B?ȉ??ł́ATensorFlow?ᐅ??API?݂̂ŋL?q????BKeras backend API?̎Q?l?????́A?`???Ŏ?????Colab?m?[?g?u?b?N?̕??ɃR?????g?Ŋ܂߂Ă??????̂ŁA?K?v?ɉ????ĎQ?l?ɂ??Ăق????B
???C???[?̃J?X?^??????
?@???ɁA???C???[?̊????@?\???m?F???悤?B
?@TensorFlow 2.x?̃??C???[?́A?S??Keras?R???̂??̂ɓ??ꂳ??Ă???B????????ɏ[?????Ă???̂ŁA?J?X?^?????????s???K?v???͂قƂ?ǔ??????Ȃ????낤?B??\?I?Ȃ??̂ɂ͈ȉ??̂??̂?????B
- Dense?N???X
- Activation?N???X
- Dropout?N???X
?@?ESpatialDropout1D?N???X
?@?ESpatialDropout2D?N???X
?@?ESpatialDropout3D?N???X - Flatten?N???X
- InputLayer?N???X
- Reshape?N???X
- Permute?N???X
- RepeatVector?N???X
- Lambda?N???X
- ActivityRegularization?N???X
- Masking?N???X
?@???C???[?͑??푽?l?Ȃ??̂??p?ӂ???Ă???A???????????Ă????ŗ???ƂƂĂ??????Ȃ??Ă??܂??̂ŁA?ꕔ???????????B?????̃??C???[?ɂ??ďڂ????͉??L?̃????N????Q?Ƃ??Ăق????B
- ?????h?L???????g?uModule: tf.keras.layers | TensorFlow Core v2.x?v
?@?ȏ??T???Ă??ړI?̃??C???[????????Ȃ??ꍇ?́A???̂悤?ɂ??ăJ?X?^???i?Ǝ??j?̂??̂??쐬???邱?Ƃ??\???i???X?g5-3?j?B
# ?J?X?^???̑S?????w?i???`?ϊ??j??Python????????
def fully_connected(inputs, weights, bias):
return tf.matmul(inputs, weights) + bias
# ?J?X?^???̃??C???[?N???X???????i???C???[?̃T?u?N???X???j
# ?itf.keras.layers.Dense()?̑???j
class CustomLayer(tf.keras.layers.Layer):
def __init__(self, units, input_dim=None, **kwargs):
self.input_dim = input_dim # ???͂̎??????i?????C???[?̓??͐??j
self.units = units # ?j???[???????i?????C???[?̏o?͐??j
super(CustomLayer, self).__init__(**kwargs)
def get_config(self):
# ???C???[?\?????V???A???C?Y?\?ɂ??郁?\?b?h?i?Ǝ??̐ݒ荀?ڂ??????o?[?ϐ??Ƃ??Ă???ꍇ?ȂǁA?K?v?ɉ????Ď???????j
config = super(CustomLayer, self).get_config()
config.update({
'input_dim': self.input_dim,
'units': self.units
})
return config
def build(self, input_shape):
#print(input_shape) # ???͌`??B?Ⴆ?u(2, 2)?v??2?s2??Ȃ???͂̎???????2??
input_data_dim = input_shape[-1] # ???͂̎??????i?????C???[?̓??͐??j
# ???͂̎????????`?F?b?N?i?f?o?b?O?j
if self.input_dim != None:
assert input_data_dim == self.input_dim # ?w?肳?ꂽ???͎??????Ǝ??ۂ̓??͎????????قȂ?܂?
# ?d?݂?lj?????
self.kernel = self.add_weight(
shape=(input_data_dim, self.units),
name='kernel',
initializer='glorot_uniform', # ?O?X??̃??X?g1-3?̂悤?ȓƎ??̊????w??ł???
trainable=True)
# ?o?C?A?X??lj?????
self.bias = self.add_weight(
shape=(self.units,),
name='bias',
initializer='zeros',
trainable=True)
#self.built = True # Layer?N???X?Ńr???h?ς݂??ǂ??????Ǘ?????̂Ɏg???Ă???i?Ȃ??Ă??傫?Ȗ??͂Ȃ??j
super(CustomLayer, self).build(input_shape) # ??Ɠ????Ӗ??BAPI?h?L???????g?Ő???????Ă??鏑????
def call(self, inputs):
return fully_connected(inputs, self.kernel, self.bias)
?@tf.keras.layers.Layer?N???X???T?u?N???X?????āA?Ǝ???CustomLayer?N???X?????????Ă???B?N???X?????̃????o?[???\?b?h?͈ȉ??̂悤?ɂȂ??Ă???B
- __init__()???\?b?h?F ???????????B?n???ꂽ???????????o?[?ϐ??ɕۑ??????肷??
- get_config()???\?b?h?F ?I?v?V?????i???????Ȃ??Ă??悢?j?B?????o?[?ϐ????܂ލ\??????Python?????`???ɃV???A???C?Y????i?ۑ??????[?h?p?j
- build()???\?b?h?F ?I?v?V?????B??{?I?ɏd?݂?o?C?A?X?Ȃǂ̃p?????[?^?[???쐬????
- call()???\?b?h?F ???C???[?̏????B???̗?ł͑S?????̐??`?ϊ????Afully_connected???Ɏ??????āA??????Ăяo???Ă???
?@tf.keras.layers.Layer?N???X?̃T?u?N???X???ɂ??Ă??ڂ????́A
- ?????h?L???????g?utf.keras.layers.Layer | TensorFlow Core v2.x?v
???Q?Ƃ??Ăق????i???y?[?W?????usubclass?v?Ō???????Ƃ悢?j?B
?I?v?e?B?}?C?U?i?œK???A???S???Y???j?̃J?X?^??????
?@?????āA?I?v?e?B?}?C?U?̊????@?\???m?F???悤?B
?@TensorFlow 2.x?̃I?v?e?B?}?C?U???A?S??Keras?R???̂??̂ɓ??ꂳ??Ă???Btf.optimizers???O??Ԃ́AKeras?R????tf.keras.optimizers???O??Ԃ̃G?C???A?X?ɂȂ??Ă???B
?@??????[?????Ă???̂ŁA?J?X?^?????????s???K?v???͂قƂ?ǂȂ??B??̓I?ɂ͈ȉ??̂??̂?????B
- SGD?N???X?i?m???I???z?~???@?j
- RMSprop?N???X
- Adagrad?N???X
- Adadelta?N???X
- Adam?N???X
- Adamax?N???X
- Nadam?N???X
- Ftrl?N???X
?@?????̃I?v?e?B?}?C?U?ɂ??ďڂ????͉??L?̃????N????Q?Ƃ??Ăق????B
- ?????h?L???????g?uModule: tf.keras.optimizers | TensorFlow Core v2.x?v
?@?ȏ??T???Ă??ړI?̃I?v?e?B?}?C?U????????Ȃ??ꍇ?́A???̂悤?ɂ??ăJ?X?^???i?Ǝ??j?̂??̂??쐬???邱?Ƃ??\???i???X?g5-4?j?B
# ?J?X?^???̍œK???A???S???Y???N???X???????i?I?v?e?B?}?C?U?̃T?u?N???X???j
# ?itf.keras.optimizers.SGD?̑???j
class CustomOptimizer(tf.keras.optimizers.Optimizer):
def __init__(self, learning_rate=0.01, name='CustomOptimizer', **kwargs):
super(CustomOptimizer, self).__init__(name, **kwargs)
self.learning_rate = kwargs.get('lr', learning_rate)
def get_config(self):
config = super(CustomOptimizer, self).get_config()
config.update({
'learning_rate': self.learning_rate
})
return config
def _create_slots(self, var_list):
for v in var_list: # `Variable`?I?u?W?F?N?g?̃??X?g
self.add_slot(v, 'accumulator', tf.zeros_like(v))
# ?Q?l??????B???????ō쐬?????X???b?g?͖??g?p?ɂȂ??Ă???
def _resource_apply_dense(self, grad, var):
# ?????ugrad?v?F ???z?i?e???\???j
# ?????uvar?v?F ?X?V?Ώۂ́u?ϐ??v?????????\?[?X?i?gresource?h?f?[?^?^?̃e???\???j
# var.device ?̓??e??F /job:localhost/replica:0/task:0/device:CPU:0
# var.dtype.base_dtype ?̓??e??F <dtype: 'float32'>
acc = self.get_slot(var, 'accumulator') # ?Q?l??????i?X???b?g?͖??g?p?j
return var.assign_sub(self.learning_rate * grad) # ?ϐ??̒l?i?p?????[?^?[?j???X?V
def _resource_apply_sparse(self, grad, var, indices):
# ?????ugrad?v?F ???z?i?C???f?b?N?X?t???́A?X?p?[?X?ȃe???\???j
# ?????uvar?v?F ?X?V?Ώۂ́u?ϐ??v?????????\?[?X?i?gresource?h?f?[?^?^?̃e???\???j
# ?????uindices?v?F ???z???[???ł͂Ȃ??v?f?? ?u?C???f?b?N?X?v?i?????^?̃e???\???j
raise NotImplementedError("????͎g??Ȃ??̂Ŗ?????")
# return ?c?c?ϐ??̒l?i?p?????[?^?[?j???X?V????u????v??ԋp????c?c
?@tf.keras.optimizers.Optimizer?N???X???T?u?N???X?????āA?Ǝ???CustomOptimizer?N???X?????????Ă???B?N???X?????̃????o?[???\?b?h?͈ȉ??̂悤?ɂȂ??Ă???B
- __init__()???\?b?h?F ???????????B?n???ꂽ???????????o?[?ϐ??ɕۑ??????肷??
- get_config()???\?b?h?F ?I?v?V?????i???????Ȃ??Ă??悢?j?B?????o?[?ϐ????܂ލ\??????Python?????`???ɃV???A???C?Y????i?ۑ??????[?h?p?j
- _create_slots()???\?b?h?F ?I?v?V?????B?X???b?g?i???g???[?j???O????ϐ??Ɋ֘A?t????ꂽ?lj??̕ϐ??j???쐬????B?X???b?g?́uAdam?v??uAdagrad?v?ȂǂŕK?v?ƂȂ?
- _resource_apply_dense()???\?b?h?F ?œK???????B???z???u?i?ʏ?́j???ȃe???\???v?ł???ꍇ?́A?p?????[?^?[?i?d?݂?o?C?A?X?j?̍X?V????
- _resource_apply_sparse()???\?b?h?F ?œK???????B???z???u?X?p?[?X?ȃe???\???i???v?f?̑?????0?ł???a?ȏ?ԁj?v?ł???ꍇ?́A?p?????[?^?[?̍X?V????
?@tf.keras.optimizers.Optimizer?N???X?̃T?u?N???X???ɂ??Ă??ڂ????́A
- ?????h?L???????g?utf.keras.optimizers.Optimizer | TensorFlow Core v2.x?v
???Q?Ƃ??Ăق????i???y?[?W?????usubclass?v?Ō???????Ƃ悢?j?B
?w?K?̃J?X?^???????ɂ???
?@?w?K?̃J?X?^???????ɂ??ẮA?O??????ς??ł???B????̓t???J?X?^?}?C?Y?̎?@?ł??邪?Atf.keras???f???????̈ꕔ?̊????g?????āAtf.keras???f????fit()???\?b?h?^evaluate???\?b?h?^predict???\?b?h???s???̋?????ς??邱?Ƃ??\?ł???B
?@??̓I?ɂ́Atf.keras.Model?N???X???T?u?N???X?????????f???̊??N???X???ɂ???A
- train_step()???\?b?h
- test_step()???\?b?h
- predict_step()???\?b?h
???I?[?o?[???C?h???邱?ƂɂȂ?B
?@?O??????????t???J?X?^?}?C?Y?̏ꍇ?́A?S?Ď????̐??E?ςőS?Ă𐧌䂷?邱?ƂɂȂ?B?????ōl???????W?b?N???e??????A?e???͈͂??Ǘ????₷???B
?@????Atf.keras???f???????̕????I?Ȋg???̏ꍇ?́A?????܂?Keras?̐??E?ς??Ȃ??悤?ɍ??K?v??????B????čl?????ɂ???ẮA?u??????̎????̕???????v?Ƃ??????邾?낤?B
?@?????I?Ȋg???̎??????@?ɂ??ẮA?i?M?҂??m?F????????j?قƂ?ǐ??????????Ȃ??B?B??A?uTensorFlow Dev Summit 2020?v?̃Z?b?V?????uLearning to read with TensorFlow and Keras (TF Dev Summit '20) - YouTube?v??Paige Bailey?????ȒP?Ɍ??y?????̂??m?F?????݂̂ł???B????āAtf.keras.Model?̃\?[?X?R?[?h??ǂ?ŗ????????????Ŏ???????K?v??????A???܂肨???߂ł??Ȃ??B???̂??ߖ{?e?ł͊???????B
???????̃J?X?^??????
?@???Ď??ɁA???????̊????@?\???m?F???悤?B
?@TensorFlow 2.x?̑????????A?S??Keras?R???̂??̂ɓ??ꂳ??Ă???Btf.losses???O??Ԃ́AKeras?R????tf.keras.losses???O??Ԃ̃G?C???A?X?ɂȂ??Ă???B
?@???????[?????Ă???̂ŁA?J?X?^?????????s???K?v???͂قƂ?ǂȂ??B??̓I?ɂ͈ȉ??̂??̂?????B
- MeanSquaredError?N???X?i???L?FMSE?j?F mean_squared_error()??
- MeanAbsoluteError?N???X?i???L?FMAE?j?F mean_absolute_error()??
- MeanAbsolutePercentageError?N???X?i???L?FMAPE?j?F mean_absolute_percentage_error()??
- MeanSquaredLogarithmicError?N???X?i???L?FMSLE?j?F mean_squared_logarithmic_error()??
- SquaredHinge?N???X?F squared_hinge()??
- Hinge?N???X?F hinge()??
- CategoricalHinge?N???X?F categorical_hinge()??
- LogCosh?N???X?F logcosh()??
- Huber?N???X?F huber_loss()??
- CategoricalCrossentropy?N???X?F categorical_crossentropy()??
- SparseCategoricalCrossentropy?N???X?F sparse_categorical_crossentropy()??
- BinaryCrossentropy?N???X?F binary_crossentropy()??
- KLDivergence?N???X?i???L?FKLD?j?F kullback_leibler_divergence()??
- Poisson?N???X?F poisson()??
- CosineSimilarity?N???X?F cosine_proximity()??
?@?????̑??????ɂ??ďڂ????͉??L?̃????N????Q?Ƃ??Ăق????B
- ?????h?L???????g?uModule: tf.keras.losses | TensorFlow Core v2.x?v
?@?ȏ??T???Ă??ړI?̑?????????????Ȃ??ꍇ?́A???̂悤?ɂ??ăJ?X?^???i?Ǝ??j?̂??̂??쐬???邱?Ƃ??\???i???X?g5-5?j?B
# ?J?X?^???̑???????Python????????
def custom_loss(y_true, y_pred):
return tf.reduce_mean(tf.square(y_true - y_pred))
# ?J?X?^???̑??????N???X???????i???C???[?̃T?u?N???X???j
# ?itf.keras.losses.MeanSquaredError()?̑???j
class CustomLoss(tf.keras.losses.Loss):
def __init__(self, name="custom_loss", **kwargs):
super(CustomLoss, self).__init__(name=name, **kwargs)
def call(self, y_true, y_pred):
y_pred = tf.convert_to_tensor(y_pred) # ?O?̂???Tensor??
y_true = tf.cast(y_true, y_pred.dtype) # ?O?̂??ߓ????f?[?^?^??
return custom_loss(y_true, y_pred)
?@tf.keras.losses.Loss?N???X???T?u?N???X?????āA?Ǝ???CustomLoss?N???X?????????Ă???B?N???X?????̃????o?[???\?b?h?͈ȉ??̂悤?ɂȂ??Ă???B
- __init__()???\?b?h?F ??????????
- call()???\?b?h?F ???????̏???
?@tf.keras.losses.Loss?N???X?̃T?u?N???X???ɂ??Ă??ڂ????́A
- ?????h?L???????g?utf.keras.losses.Loss | TensorFlow Core v2.x?v
???Q?Ƃ??Ăق????i???y?[?W?????usubclass?v?Ō???????Ƃ悢?j?B
?]?????i???𗦂⑹???j?̃J?X?^??????
?@???čŌ?ɁA?]?????̊????@?\???m?F???悤?B
?@TensorFlow 2.x?̕]???????A?S??Keras?R???̂??̂ɓ??ꂳ??Ă???Btf.metrics???O??Ԃ́AKeras?R????tf.keras.metrics???O??Ԃ̃G?C???A?X?ɂȂ??Ă???B
?@??????[?????Ă???̂ŁA?J?X?^?????????s???K?v???͂قƂ?ǂȂ??B??̓I?ɂ͈ȉ??̂??̂?????B
- Accuracy?N???X?F accuracy()??
- BinaryAccuracy?N???X?F binary_accuracy()??
- CategoricalAccuracy?N???X?F categorical_accuracy()??
- SparseCategoricalAccuracy?N???X?F sparse_categorical_accuracy()??
- TopKCategoricalAccuracy?N???X?F top_k_categorical_accuracy()??
- SparseTopKCategoricalAccuracy?N???X?F sparse_top_k_categorical_accuracy()??
- FalsePositives?N???X
- FalseNegatives?N???X
- TrueNegatives?N???X
- TruePositives?N???X
- Precision?N???X
- Recall?N???X
- SensitivityAtSpecificity?N???X
- SpecificityAtSensitivity?N???X
- PrecisionAtRecall?N???X
- AUC?N???X
?@???Ȃ??]?????Ƃ??ẮA???𗦂Ȃǂ̐??x?????łȂ??A???????]???ΏۂƂȂ?B?????ɂ??ẮA???????Ɠ??????̂?tf.keras.metrics???O??ԓ??ɂ?????????????Ă???B??قǎ????????????Ɠ??????O?ɂȂ邽?߁A??L?̉ӏ??????ł͏ȗ??????B
?@?????̕]?????ɂ??ďڂ????͉??L?̃????N????Q?Ƃ??Ăق????B
- ?????h?L???????g?uModule: tf.keras.metrics | TensorFlow Core v2.x?v
?@?ȏ??T???Ă??ړI?̕]????????????Ȃ??ꍇ?́A???̂悤?ɂ??ăJ?X?^???i?Ǝ??j?̂??̂??쐬???邱?Ƃ??\???i???X?g5-6?j?B
# ???????ǂ????肷?????????
def custom_matches(y_true, y_pred): # y_true?͐????Ay_pred?͗\???i?o?́j
threshold = tf.cast(0.0, y_pred.dtype) # -1??1??????臒l???쐬
y_pred = tf.cast(y_pred >= threshold, y_pred.dtype) # 臒l??????0?A?ȏ??1?ɕϊ?
# 2?{????-1.0???邱?ƂŁA0?^1??-1.0?^1.0?ɃX?P?[???ϊ????Đ??𗦂??v?Z
return tf.equal(y_true, y_pred * 2 - 1.0) # ???????ǂ????̃f?[?^?i???ς͂??Ă??Ȃ??j
# ?J?X?^???̕]?????N???X???????i?T?u?N???X???j
# ?itf.keras.metrics.BinaryAccuracy()?̑???j
class CustomAccuracy(tf.keras.metrics.Mean):
def __init__(self, name='custom_accuracy', dtype=None):
super(CustomAccuracy, self).__init__(name, dtype)
# ???𗦂̏?Ԃ??X?V????ۂɌĂяo?????????J?X?^?}?C?Y
def update_state(self, y_true, y_pred, sample_weight=None):
matches = custom_matches(y_true, y_pred)
return super(CustomAccuracy, self).update_state(
matches, sample_weight=sample_weight) # ?????ς͓????Ŏ????I?Ɏ???Ă????
?@tf.keras.metrics.Metric?N???X?i???X?g5-6?ł͂??̔h???N???X?ł???Mean?N???X?j???T?u?N???X?????āA?Ǝ???CustomMetric?N???X?????????Ă???B?N???X?????̃????o?[???\?b?h?͈ȉ??̂悤?ɂȂ??Ă???i??Metric?N???X???T?u?N???X???????ꍇ?́A?ȉ???2?̃??\?b?h?ɉ????āA???g???N?X?l?̌v?Z???ʂ?Ԃ?result()???\?b?h??????????K?v??????j?B
- __init__()???\?b?h?F ??????????
- update_state()???\?b?h?F ?]?????̏????B???g???N?X???v??ݐς??Ă???
?@tf.keras.metrics.Metric?N???X?̃T?u?N???X???ɂ??Ă??ڂ????́A
- ?????h?L???????g?utf.keras.metrics.Metric | TensorFlow Core v2.x?v
???Q?Ƃ??Ăق????i???y?[?W?????usubclass?v?Ō???????Ƃ悢?j?B
?@????́A???^?ƂȂ?Metric?N???X?ł͂Ȃ??A???Ϗ??????????ς݂?tf.keras.metrics.Mean?N???X???T?u?N???X?????邱?ƂŁA???ςɊւ????Ԃ??y???????B???̗Ⴞ?ƁuMean?N???X???????ǂ̂悤?ɂȂ??Ă??邩?v?ɂ͒??ӂ??K?v?????A???????????h???N???X?𗘗p???????????\?ł???B
?@???Ȃ݂ɁA??????BinaryAccuracy?N???X?̎??????e???????MeanMetricWrapper?N???X???p?????Ă??邪?A???̃N???X??tf.keras.metrics???O??Ԃ???A?N?Z?X?ł??Ȃ??̂ŗ??p???Â炢?BMeanMetricWrapper?N???X???g???????ꍇ?́ATensorFlow?R?~???j?e?B??????A?h?I???utfa.metrics.MeanMetricWrapper?v?ɓ????e?̂??̂?????̂ŁA??????g???Ƃ悢???낤?i?????????@?̐????͊???????j?B
?????܂ł̃J?X?^???????̎g?p??
?@?ȏ?őS?ẴJ?X?^?}?C?Y???@??????????B???Ƃ͎??s???邾???ł???B????͑O??Ɠ????R?[?h?ƂȂ邽?ߐ????͊??????A?R?[?h?Ǝ??s???ʂ????????????ƂƂ???B
# ?????????̒?`
activation1 = CustomActivation(name='activation1')
activation2 = CustomActivation(name='activation2')
acti_out = layers.Activation('tanh', name='acti_out')
# ???f???̐v
class NeuralNetwork(tf.keras.Model):
def __init__(self, *args, **kwargs):
super(NeuralNetwork, self).__init__(*args, **kwargs)
self.layer1 = CustomLayer(units=LAYER1_NEURONS, name='layer1')
self.layer2 = CustomLayer(units=LAYER2_NEURONS, name='layer2')
self.layer_out = CustomLayer(units=OUTPUT_RESULTS, name='layer_out')
def call(self, inputs, training=None):
x1 = activation1(self.layer1(inputs))
x2 = activation2(self.layer2(x1))
outputs = acti_out(self.layer_out(x2))
return outputs
# ???f???̐???
model = NeuralNetwork()
# ???f???̊T?v?ƍ\???}?̏o??
def get_functional_model(model):
x = layers.Input(shape=(INPUT_FEATURES,), name='layer_in')
temp_model = tf.keras.Model(inputs=[x], outputs=model.call(x), name='cusotm_model')
return temp_model
f_model = get_functional_model(model)
f_model.summary()
tf.keras.utils.plot_model(f_model, show_shapes=True, show_layer_names=True, to_file='model.png')
from IPython.display import Image
Image(retina=False, filename='model.png')
# ?œK???A???S???Y???Ƒ??????̒?`
optimizer = CustomOptimizer(learning_rate=0.03)
criterion = CustomLoss()
# ?]?????i?????Ɛ??𗦁j?̒?`
train_loss = tf.keras.metrics.Mean(name='train_loss')
train_accuracy = CustomAccuracy(name='train_accuracy')
valid_loss = tf.keras.metrics.Mean(name='valid_loss')
valid_accuracy = CustomAccuracy(name='valid_accuracy')
# ?~?j?o?b?`?p?f?[?^?̏???
X_train_f32 = X_train.astype('float32')
y_train_f32 = y_train.astype('float32')
X_valid_f32 = X_valid.astype('float32')
y_valid_f32 = y_valid.astype('float32')
train_sliced = tf.data.Dataset.from_tensor_slices((X_train_f32, y_train_f32)) # ?P???p
valid_sliced = tf.data.Dataset.from_tensor_slices((X_valid_f32, y_valid_f32)) # ???x???ؗp
train_dataset = train_sliced.shuffle(250).batch(15)
valid_dataset = valid_sliced.batch(15)
import tensorflow.keras.backend as K
# 1?̌P???i?w?K?j?̏???
@tf.function
def train_step(train_X, train_y):
training = True
K.set_learning_phase(training)
with tf.GradientTape() as tape:
pred_y = model(train_X, training=training)
loss = criterion(pred_y, train_y)
gradient = tape.gradient(loss, model.trainable_weights)
optimizer.apply_gradients(zip(gradient, model.trainable_weights))
train_loss(loss)
train_accuracy(train_y, pred_y)
# 1?̐??x???i?]???j?̏???
@tf.function
def valid_step(valid_X, valid_y):
training = False
K.set_learning_phase(training)
pred_y = model(valid_X, training=training)
loss = criterion(pred_y, valid_y)
valid_loss(loss)
valid_accuracy(valid_y, pred_y)
# ?G?|?b?N?????A?P???i?w?K?j?Ɛ??x???i?]???j?????s
EPOCHS = 100
train_history = []
valid_history = []
for epoch in range(EPOCHS):
train_loss.reset_states()
train_accuracy.reset_states()
valid_loss.reset_states()
valid_accuracy.reset_states()
for train_X, train_y in train_dataset:
train_step(train_X, train_y)
for valid_X, valid_y in valid_dataset:
valid_step(valid_X, valid_y)
n = epoch + 1
avg_loss = train_loss.result()
avg_acc = train_accuracy.result()
avg_val_loss = valid_loss.result()
avg_val_acc = valid_accuracy.result()
train_history.append(avg_loss)
valid_history.append(avg_val_loss)
print(f'[Epoch {n:3d}/{EPOCHS:3d}]' \
f' loss: {avg_loss:.5f}, acc: {avg_acc:.5f}' \
f' val_loss: {avg_val_loss:.5f}, val_acc: {avg_val_acc:.5f}')
print('Finished Training')
print(model.get_weights())
# ?w?K???ʁi?????j?̃O???t??`??
import matplotlib.pyplot as plt
epochs = len(train_history)
plt.plot(range(epochs), train_history, marker='.', label='loss (Training data)')
plt.plot(range(epochs), valid_history, marker='.', label='loss (Validation data)')
plt.legend(loc='best')
plt.grid()
plt.xlabel('epoch')
plt.ylabel('loss')
plt.show()
# ???_
model(tf.constant([[0.1,-0.2]]))
# <tf.Tensor: shape=(1, 1), dtype=float32, numpy=array([[0.99654746]], dtype=float32)> ?c?c?Ȃǂƕ\???????
?i6?j?쐬?ς?Estimators?̗??p?mtf.estimator?n?i?????j
?@?쐬?ς?Estimators?ɂ??ẮA??{?I?ɔ??i??Ɍ݊????ړI?ő??݂??邽?߁j?ł͂??邪?A?????h?L???????g?uEstimators | TensorFlow Core?v?Ɋ܂܂?Ă???A?S??????????킯?ɂ????????A???????̈?Ƃ??Ď??グ???B
?@???????u?????Ă????ŏڂ??????????邱?Ƃ́A?t?ɕ??Q?ł???v?ƍl???A
?̒??????ɎQ?l???????ڂ???ɂƂǂ߂??B???Ȃ݂?tf.estimator?̎??????@?͂??܂莑?????Ȃ??̂ŁA???̓_?ł??w?тɂ????̂ł????߂ł??Ȃ??i??Colab?m?[?g?u?b?N?̃T???v???R?[?h???A?M?҂??\?[?X?R?[?h??ǂ????ō\???𗝉????A?K?v?ȏ????????N?????????̂ł???j?B
????ȍ~?ɂ???
?@????́ASubclassing?i?T?u?N???X???j???f?????g?????t???J?X?^?}?C?Y?̏??????ɂ??Đ????????B?ȏ?ŁATensorFlow?̏?????????ʂ萧?e???????ƂɂȂ?B
?@????ȍ~?́A?????Ŋw??Subclassing???f????compile()??fit()???Ȃǂ??g???āA?f?B?[?v???[?j???O?ɂ??Ă̊e?탂?f???ɂ??Ċw??ł????B????͉?A??????????B
Copyright© Digital Advantage Corp. All Rights Reserved.
?A?C?e?B???f?B?A????̂??m?点
??IT eBook
?ҏW??????̂??m?点
RSS?ɂ???
?A?C?e?B???f?B?AID?ɂ???
???[???}?K?W???o?^
??IT?̃??[???}?K?W???́A ???????A???ׂĖ????ł??B???Ѓ??[???}?K?W???????w?ǂ????????B
ITmedia?̓A?C?e?B???f?B?A??????Ђ̓o?^???W?ł??B
???f?B?A?ꗗ | ????SNS | ?L???ē? | ???₢???킹 | ?v???C?o?V?[?|???V?[ | RSS | ?^?c??? | ?̗p??? | ??????



?}?@?j???[?????l?b?g???[?N?????̃t???J?X?^?}?C?Y
?}5-1?@?J?X?^?}?C?Y?̊?{?p?^?[??
?}5-3?@???f???̓??e?̏o?͗?
?}5-4?@???f???̍\???}?̕\????
?}5-5?@Colab?y?[?W??ւ̊w?K?o?߂̏o?͗?
?}5-6?@?????l?̐??ڃO???t?`???



