subDesTagesMitExtraKaese 4 年 前
コミット
ad7cea006f
3 ファイル変更45 行追加6 行削除
  1. 10 1
      doku/analyse.md
  2. 31 0
      doku/layer/conv2d.md
  3. 4 5
      examples/train.py

+ 10 - 1
doku/analyse.md

@@ -18,4 +18,13 @@
 - kann mit g++ oder bazel kompiliert werden
 - TF-includes sind im vorkompiliertem tensorflow Paket enthalten
   - beschränkter Zugriff auf Unterfunktionen interner Operationen
-- inputs können mit OP_REQUIRES eingeschränkt werden
+- inputs können mit OP_REQUIRES eingeschränkt werden
+
+## Asynchrone Operatoren
+
+- werden wie synchrone OPs mit dem Model instanziiert
+- nutzen einen *done*-Callback, der 1x aufgerufen werden muss
+- parallele Stränge des Keras-Graphen werden gleichzeitig ausgeführt
+- standardmäßig werden nur 8 Operatoren gleichzeitig ausgeführt
+- neue Schicht wird erst begonnen, wenn alle Operatoren der vorherigen fertig sind
+  - keine Vorteil den Datensatz einer Schicht auf mehrere OPs in Python aufzuteilen

+ 31 - 0
doku/layer/conv2d.md

@@ -0,0 +1,31 @@
+# Zweidimensionale Konvolution
+
+## Tensorgröße
+
+Input:
+- in TF: `[batchSize, imageX, imageY, channels]`
+- an FPGA: `[imageX, imageY]`
+
+Kernel:
+- in TF: `[kernelX, kernelY, channels, filters]`
+- an FPGA: `[kernelX, kernelY]`
+
+Output:
+- vom FPGA: `[imageX2, imageY2]`
+- an TF: `[batchSize, imageX2, imageY2, channels * filters]`
+
+## Parallelisierung
+
+1.  **Ohne FPGA-seitigem Speicher**
+
+    FPGA Recheneinheiten werden verteilt `(batchSize * channels * filters)` Mal verwendet.
+
+    ```python
+    for sample in range(batchSize):
+      for channnel in range(channels):
+        for filter in range(filters):
+          output[sample][channel + filter * channels] = f(
+            input[sample][channel], 
+            kernel[channel][filter]
+          )
+    ```

+ 4 - 5
examples/train.py

@@ -41,13 +41,12 @@ y_test = to_categorical(y_test, num_classes)
 
 a = layers.Input(dtype=tf.int32, shape=(28, 28, 1))
 b = Conv2DFPGA(32)(a)
-c = Conv2DFPGA(32)(a)
+c = Conv2DFPGA(16)(a)
 d = Conv2DFPGA(2)(b)
-e = Conv2DFPGA(2)(c)
+e = Conv2DFPGA(4)(c)
 
-x = layers.Add()([d,e])
-y = layers.Flatten()(x)
-z = layers.Dense(num_classes, activation='softmax')(y)
+x = layers.Add()([layers.Flatten()(d),layers.Flatten()(e)])
+z = layers.Dense(num_classes, activation='softmax')(x)
 
 model = Model(inputs=a, outputs=z)
 """