د موادو په څیر
- کاري کاري
- د جوړولو مرحله
- کاري موډلونه
- د 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 لسیس لاندې شریک شوي دي.
په اصل کې په The