Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

tf.Module

TensorFlow 1 versi Lihat sumber di GitHub

Basis saraf modul kelas jaringan.

Sebuah modul adalah suatu wadah bernama untuk tf.Variable s, lainnya tf.Module dan fungsi yang berlaku untuk input pengguna. Sebagai contoh lapisan padat di jaringan saraf mungkin dilaksanakan sebagai tf.Module :

 class Dense(tf.Module):
   def __init__(self, in_features, out_features, name=None):
     super(Dense, self).__init__(name=name)
     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)
  

Anda dapat menggunakan lapisan padat seperti yang Anda harapkan:

d = Dense(in_features=3, out_features=2)
d(tf.ones([1, 3]))
<tf.Tensor: shape=(1, 2), dtype=float32, numpy=..., dtype=float32)>

Dengan subclassing tf.Module bukan object setiap tf.Variable atau tf.Module contoh ditugaskan untuk properti obyek dapat dikumpulkan dengan menggunakan variables , trainable_variables atau submodules properti:

d.variables
    (<tf.Variable 'b:0' shape=(2,) dtype=float32, numpy=...,
    dtype=float32)>,
    <tf.Variable 'w:0' shape=(3, 2) dtype=float32, numpy=..., dtype=float32)>)

Subclass dari tf.Module juga dapat mengambil keuntungan dari _flatten metode yang dapat digunakan untuk menerapkan pelacakan jenis lainnya.

Semua tf.Module kelas memiliki dikaitkan tf.name_scope yang dapat digunakan untuk operasi kelompok di TensorBoard dan menciptakan hirarki untuk nama variabel yang dapat membantu dengan debugging. Kami sarankan untuk menggunakan ruang lingkup nama saat membuat bersarang submodul / parameter atau metode maju yang grafiknya Anda mungkin ingin memeriksa di TensorBoard. Anda dapat memasukkan lingkup nama secara eksplisit menggunakan with self.name_scope: atau Anda dapat membubuhi keterangan metode (terlepas dari __init__ ) dengan @tf.Module.with_name_scope .

 class MLP(tf.Module):
  def __init__(self, input_size, sizes, name=None):
    super(MLP, self).__init__(name=name)
    self.layers = []
    with self.name_scope:
      for size in sizes:
        self.layers.append(Dense(input_size=input_size, output_size=size))
        input_size = size

  @tf.Module.with_name_scope
  def __call__(self, x):
    for layer in self.layers:
      x = layer(x)
    return x
 

name Mengembalikan nama modul ini sebagai berlalu atau ditentukan di ctor.

name_scope Mengembalikan tf.name_scope contoh untuk kelas ini.
submodules Urutan semua sub-modul.

Submodul adalah modul yang merupakan sifat dari modul ini, atau ditemukan sebagai sifat dari modul yang sifat dari modul ini (dan seterusnya).

a = tf.Module()
b = tf.Module()
c = tf.Module()
a.b = b
b.c = c
list(a.submodules) == [b, c]
True
list(b.submodules) == [c]
True
list(c.submodules) == []
True

trainable_variables Urutan variabel dilatih dimiliki oleh modul ini dan submodul nya.

variables Urutan variabel yang dimiliki oleh modul ini dan submodul nya.

metode

with_name_scope

Lihat sumber

Dekorator untuk secara otomatis memasukkan lingkup nama modul.

class MyModule(tf.Module):
  @tf.Module.with_name_scope
  def __call__(self, x):
    if not hasattr(self, 'w'):
      self.w = tf.Variable(tf.random.normal([x.shape[1], 3]))
    return tf.matmul(x, self.w)

Menggunakan modul di atas akan menghasilkan tf.Variable dan tf.Tensor s yang namanya termasuk nama modul:

mod = MyModule()
mod(tf.ones([1, 2]))
<tf.Tensor: shape=(1, 3), dtype=float32, numpy=..., dtype=float32)>
mod.w
<tf.Variable 'my_module/Variable:0' shape=(2, 3) dtype=float32,
numpy=..., dtype=float32)>

args
method Metode untuk membungkus.

Pengembalian
Metode asli dibungkus sedemikian rupa sehingga memasuki lingkup nama modul.