د Keras او tf.Module په کارولو سره د ماډلونو جوړولو، روزنې او ذخیره کول

ډېر اوږد؛ لوستل

دا لارښود تاسو ته د انعطاف Keras کټګوریو جوړولو، د tf.keras.Model سره ماډل جوړولو او د TensorFlow د قوي وسایلو په کارولو سره خوندي کوي.
featured image - د Keras او tf.Module په کارولو سره د ماډلونو جوړولو، روزنې او ذخیره کول
Tensor Flow - [Technical Documentation] HackerNoon profile picture
0-item

د موادو په څیر

  • کاري کاري
  • د جوړولو مرحله
  • کاري موډلونه
  • د Keras موډلونه
  • د Keras موډلونو چک

په یاد ولرئ چې په دې وخت کې، د کیرس په اړه هیڅ اشاره نلري. تاسو کولی شئ خپل لوړ کچه API جوړ کړئtf.Moduleاو خلک لري.

په دې برخه کې، تاسو به څنګه د Keras کارويtf.Moduleد Keras موډلونو بشپړ کارن لارښود پهد ګرځنده.

Keras layers او ماډلونه ډیر اضافي ځانګړتیاوې لري، په شمول:

  • د اختیاري خساري
  • د metrics ملاتړ
  • د روزنې او د پایلو کارولو تر منځ د تبادله کولو لپاره د اختیاري روزنې arguments لپاره د داخلي ملاتړ
  • د سیلیکون بکسونو په ځای کې د python اشیاء ذخیره کول او بیاکتنه کول
  • get_config او from_config روشونه چې تاسو ته اجازه ورکوي چې د پروګرامونو په دقت کې ذخیره کړئ چې په Python کې د نمونې کلن کولو اجازه ورکوي

دا ځانګړتیاوې د subclassing له لارې ډیر پیچلي ماډلونه اجازه ورکوي، لکه د ګمرک GAN یا Variational AutoEncoder (VAE) ماډل.بشپړ لارښودد custom layers او ماډلونه.

Keras موډلونه هم د اضافي فعالیت سره راځي چې دوی په اسانۍ سره په څو ماشینونو کې روزنې، ارزیابی، لوستل، ذخیره او حتی روزنه کوي.

کاري کاري

tf.keras.layers.Layerد ټولو Keras کټګورۍ د بنسټ کټګورۍ ده، او دا لهtf.Module.

تاسو کولی شئ یو ماډل په Keras کچه بدل کړئ یوازې له خوا د والدین بدل کړئ او بیا بدل کړئ__call__دcall:


class MyDense(tf.keras.layers.Layer):
  # Adding **kwargs to support base Keras layer arguments
  def __init__(self, in_features, out_features, **kwargs):
    super().__init__(**kwargs)

    # This will soon move to the build step; see below
    self.w = tf.Variable(
      tf.random.normal([in_features, out_features]), name='w')
    self.b = tf.Variable(tf.zeros([out_features]), name='b')
  def call(self, x):
    y = tf.matmul(x, self.w) + self.b
    return tf.nn.relu(y)

simple_layer = MyDense(name="simple", in_features=3, out_features=3)

Keras layers لري د خپل__call__چې ځینې حسابونه په راتلونکي برخه کې بیان کوي او بیا د تماسcall()تاسو باید د فعالیتونو په اړه هیڅ بدلون نه وګورئ.


simple_layer([[2.0, 2.0, 2.0]])


<tf.Tensor: shape=(1, 3), dtype=float32, numpy=array([[1.1688161, 0.       , 0.       ]], dtype=float32)>

دbuildد پړاو

لکه څنګه چې ذکر شوي، په ډیری صورتونو کې دا مناسب ده چې د بدلونونو جوړولو لپاره انتظار وکړئ چې تاسو د وارداتو شکل په یقیني توګه وي.

د Keras کټګورۍ سره یو اضافي ژوند چرګانه کټګورۍ شامل دي چې تاسو ته اجازه ورکوي چې ستاسو کټګورۍ په څرنګه کې ډیر انعطافیت لري. دا پهbuildدنده

buildپه حقیقت کې، دا د یو ځل په توګه نومول کیږي، او دا د وارداتو شکل سره نومول کیږي. دا معمولا د متغیرونو (د وزنونو) جوړولو لپاره کارول کیږي.

تاسو کولی شئ rewriteMyDenseد اوبو کچه ته د خپل input اندازه ته انعطاف لري:


class FlexibleDense(tf.keras.layers.Layer):
  # Note the added `**kwargs`, as Keras supports many arguments
  def __init__(self, out_features, **kwargs):
    super().__init__(**kwargs)
    self.out_features = out_features

  def build(self, input_shape):  # Create the state of the layer (weights)
    self.w = tf.Variable(
      tf.random.normal([input_shape[-1], self.out_features]), name='w')
    self.b = tf.Variable(tf.zeros([self.out_features]), name='b')

  def call(self, inputs):  # Defines the computation from inputs to outputs
    return tf.matmul(inputs, self.w) + self.b

# Create the instance of the layer
flexible_dense = FlexibleDense(out_features=3)

په دې وخت کې، د نمونوي نه جوړ شوی، نو د بدلونونه نه لري:


flexible_dense.variables


[]

د ګمرک په تماس کې د مناسب اندازه بدلونونه تادیه کوي:


# Call it, with predictably random results
print("Model results:", flexible_dense(tf.constant([[2.0, 2.0, 2.0], [3.0, 3.0, 3.0]])))


Model results: tf.Tensor(
[[-2.531786  -5.5550847 -0.4248762]
 [-3.7976792 -8.332626  -0.6373143]], shape=(2, 3), dtype=float32)


flexible_dense.variables


[<tf.Variable 'flexible_dense/w:0' shape=(3, 3) dtype=float32, numpy=
 array([[-0.77719826, -1.9281565 ,  0.82326293],
        [ 0.85628736, -0.31845194,  0.10916236],
        [-1.3449821 , -0.5309338 , -1.1448634 ]], dtype=float32)>,
 <tf.Variable 'flexible_dense/b:0' shape=(3,) dtype=float32, numpy=array([0., 0., 0.], dtype=float32)>]

له خواbuildیوازې یو ځل په تماس کې، د انټروټونه به په صورت کې چې د انټروټ شکل د کټګورۍ متغیرونو سره مطابقت نلري:


try:
  print("Model results:", flexible_dense(tf.constant([[2.0, 2.0, 2.0, 2.0]])))
except tf.errors.InvalidArgumentError as e:
  print("Failed:", e)


Failed: Exception encountered when calling layer 'flexible_dense' (type FlexibleDense).

{ {function_node __wrapped__MatMul_device_/job:localhost/replica:0/task:0/device:CPU:0} } Matrix size-incompatible: In[0]: [1,4], In[1]: [3,3] [Op:MatMul] name: 

Call arguments received by layer 'flexible_dense' (type FlexibleDense):
  • inputs=tf.Tensor(shape=(1, 4), dtype=float32)

کاري موډلونه

تاسو کولی شئ خپل ماډل د Keras کټګوریو په توګه تعریف کړئ.

په هرصورت، Keras هم د بشپړ ځانګړتیاوو د موډل ټولګي د نومtf.keras.Modelدا له خوا وارثtf.keras.layers.Layer، نو د Keras ماډل کولای شي په ورته ډول کارول شي او د Keras کټګوریو سره نښلول شي. د Keras ماډلونه اضافي فعالیت لري چې د دوی په اسانۍ سره په څو ماشینونو کې روزل کیږي، evaluating، loading، saving، او حتی روزل کیږي.

تاسو کولی شئ دSequentialModuleله اوسط سره تقریبا ورته کوډ، بیا بدلون__call__دcall()د والدین بدلون:


@keras.saving.register_keras_serializable()
class MySequentialModel(tf.keras.Model):
  def __init__(self, name=None, **kwargs):
    super().__init__(**kwargs)

    self.dense_1 = FlexibleDense(out_features=3)
    self.dense_2 = FlexibleDense(out_features=2)
  def call(self, x):
    x = self.dense_1(x)
    return self.dense_2(x)

# You have made a Keras model!
my_sequential_model = MySequentialModel(name="the_model")

# Call it on a tensor, with random results
print("Model results:", my_sequential_model(tf.constant([[2.0, 2.0, 2.0]])))


Model results: tf.Tensor([[ 0.26034355 16.431221  ]], shape=(1, 2), dtype=float32)

ټول ورته ځانګړتیاوې شتون لري، په شمول د متغیرونو او زیرموډولونو څارنه.

یادونه: د Keras کچه یا موډل کې د خام tf.Module نښلول به د روزنې یا ذخیره کولو لپاره خپل متغیرونه راټول نه کړي. په بل ډول، د Keras کچهونه په Keras کچه کې نښلول شي.

یادونه: د Keras کچه یا موډل کې د خام tf.Module نښلول به د روزنې یا ذخیره کولو لپاره خپل متغیرونه راټول نه کړي. په بل ډول، د Keras کچهونه په Keras کچه کې نښلول شي.


my_sequential_model.variables


[<tf.Variable 'my_sequential_model/flexible_dense_1/w:0' shape=(3, 3) dtype=float32, numpy=
 array([[ 1.4749854 ,  0.16090827,  2.2669017 ],
        [ 1.6850946 ,  1.1545411 ,  0.1707306 ],
        [ 0.8753734 , -0.13549292,  0.08751986]], dtype=float32)>,
 <tf.Variable 'my_sequential_model/flexible_dense_1/b:0' shape=(3,) dtype=float32, numpy=array([0., 0., 0.], dtype=float32)>,
 <tf.Variable 'my_sequential_model/flexible_dense_2/w:0' shape=(3, 2) dtype=float32, numpy=
 array([[-0.8022977 ,  1.9773549 ],
        [-0.76657015, -0.8485579 ],
        [ 1.6919082 ,  0.49000967]], dtype=float32)>,
 <tf.Variable 'my_sequential_model/flexible_dense_2/b:0' shape=(2,) dtype=float32, numpy=array([0., 0.], dtype=float32)>]


my_sequential_model.submodules


(<__main__.FlexibleDense at 0x7f790c7e0e80>,
 <__main__.FlexibleDense at 0x7f790c7e6940>)

نندارتونtf.keras.Modelدا د TensorFlow ماډل جوړولو لپاره یو خورا پیتونیک لارښود ده. که تاسو د نورو frameworks څخه ماډلونه migrating یاست، دا کولی شي خورا ساده وي.

که تاسو د ماډلونو جوړ کړئ چې د موجوده کټګورۍ او انټونونو ساده ترکیبونه دي، تاسو کولی شئ د کارولو سره وخت او فضا خوندي کړئ.د API کارول، کوم چې د نمونوي reconstruction او آرژانتیک په اړه اضافي ځانګړتیاوو سره راځي.

دلته د فعال API سره ورته ماډل دی:


inputs = tf.keras.Input(shape=[3,])

x = FlexibleDense(3)(inputs)
x = FlexibleDense(2)(x)

my_functional_model = tf.keras.Model(inputs=inputs, outputs=x)

my_functional_model.summary()


Model: "model"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 input_1 (InputLayer)        [(None, 3)]               0         
                                                                 
 flexible_dense_3 (Flexible  (None, 3)                 12        
 Dense)                                                          
                                                                 
 flexible_dense_4 (Flexible  (None, 2)                 8         
 Dense)                                                          
                                                                 
=================================================================
Total params: 20 (80.00 Byte)
Trainable params: 20 (80.00 Byte)
Non-trainable params: 0 (0.00 Byte)
_________________________________________________________________


my_functional_model(tf.constant([[2.0, 2.0, 2.0]]))


<tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[3.4276495, 2.937252 ]], dtype=float32)>

په دې کې د لوی فرق دا ده چې د وارداتو شکل د فعال جوړښت پروسه برخه په توګه په مخ کې مشخص شوی.input_shapeپه دې صورت کې ، دا اړتیا نلري چې په بشپړه توګه مشخص شي ، تاسو کولی شئ ځینې اندازې لکهNone.

یادونه: تاسو ته اړتیا نلري چې د input_shape یا د InputLayer په یو subclassed ماډل ځانګړئ؛ دا انګرامونه او کچه به نږدې وي.

Note:تاسو اړتیا نلريinput_shapeیا دInputLayerپه یو subclassed ماډل کې؛ دا انګرامونه او کټګورۍ به نښلیدل شي.

د Keras موډلونه

د Keras موډلونه د خپل تخصصي zip آرشیف ذخیره کولو فارم لري، چې د.kerasد اوږدوالي. کله چې د تماسtf.keras.Model.saveد A اضافه.kerasد فایبر نوم پراختیا. د مثال په توګه:


my_sequential_model.save("exname_of_file.keras")

همدارنګه په اسانۍ سره، دوی کولی شي په لویدیځ کې لوستل شي:


reconstructed_model = tf.keras.models.load_model("exname_of_file.keras")

د زپ آرشیف -.kerasفایلونه - هم د متري، د نقصان، او د optimizer حالتونه خوندي کړئ.

دا rekonstructed ماډل کولی شي کارول شي او به د ورته معلوماتو په تماس کې د ورته پايلې تولید کړي:


reconstructed_model(tf.constant([[2.0, 2.0, 2.0]]))


<tf.Tensor: shape=(1, 2), dtype=float32, numpy=array([[ 0.26034355, 16.431221  ]], dtype=float32)>

د Keras موډلونو چک

د Keras ماډلونه هم چیک پوښل کیدی شي، او دا به ورته ښکاريtf.Module.

د Keras ماډلونو ذخیره کولو او serialization په اړه نور معلومات شتون لري، په شمول د ځانګړتیاو د ملاتړ لپاره د ګمرکاتو کټګوریو لپاره د تنظیم کولو طریقې وړاندې کولو.د سپارلو او serialization لارښود.

هغه څه چې بل

که تاسو غواړئ د Keras په اړه نور تفصيلات پوه شئ، تاسو کولی شئ د Keras موجودو لارښوونه ونیسئدلته.

د لوړ کچه API په جوړ کې یو بل مثالtf.moduleدی Sonnet له DeepMind، چې په اړه پوښل کیږيزموږ سایټ.


په اصل کې په TensorFlow ویب پاڼه کې چاپ شوی، دا مقاله دلته د نوي نوم لاندې ښودل کیږي او د CC BY 4.0 لسیس شوی دی. د کوډ نمونې د Apache 2.0 لسیس لاندې شریک شوي دي.

په اصل کې په TheTensorFlowپه ویب پاڼه کې، دا مقاله دلته د نوي نوم لاندې ښودل کیږي او د CC BY 4.0 لسیس شوی دی. د کوډ نمونې د Apache 2.0 لسیس لاندې شریک شوي دي.

د TensorFlow


Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks