Saya sedang membangun aplikasi pembelajaran mesin di Tensorflow 2.0.
Saya mencoba mengoptimalkan efisiensi komputasi dengan memecahkan for-loop (jika suatu kondisi terpenuhi) saat mengulangi fakta di dalam fungsi panggilan, tetapi mengembalikan kesalahan yang mengatakan:

OperatorNotAllowedInGraphError: menggunakan tf.Tensor sebagai Python bool tidak diizinkan: AutoGraph tidak mengonversi fungsi ini. Coba hiasi langsung dengan u/tf.function.
(Saya juga mencoba menambahkan fungsi tf metode panggilan

Adakah yang tahu cara memecahkan for-loop di dalam fungsi panggilan dalam model tensorflow khusus dan melakukan logika?

def call(self, inputs, questions):
    episode = tf.zeros(shape=(self.batch_size, self.units))
    memory = questions
    facts = self.split(self.transpose(self.cast(inputs, tf.float32), perm?(1,0,2)), self.facts_len)

    for _ in range(self.passes):
        for c in facts:
            c = tf.squeeze(c)
            g = self.attention(c, memory, questions)

            episode = (
                g * self.rnn(tf.expand_dims(c,-1), memory)[1] + (1-g) * episode
            )

        # Generates next memory
        _, memory = self.rnn(self.expand(episode, -1), memory)
    return memory
1
Marius Johan 22 April 2020, 23:33

1 menjawab

Jawaban Terbaik

Anda harus dapat menggunakan break di dalam logika Anda. Keras menerapkan tanda tangan ke call, jadi seharusnya berfungsi, tetapi tebakan saya adalah Anda perlu mengubah loop luar: for _ in tf.range(self.passes), dan jika jeda ada di dalam loop dalam, pastikan facts adalah Tensor juga.

Lihat panduan ini dan referensi untuk detail selengkapnya.

0
Dan Moldovan 30 April 2020, 13:03