   [desc]
   (layers/dropout [(:output-size desc)] (:probability desc)))
 
+
 (defn build-full-network-description
   "build step verifies the network and fills in the implicit entries calculating
   things like the convolutional layer's output size."
   [input-desc-seq]
   (let [input-desc-seq (flatten input-desc-seq)]
-    (reduce (fn [accum item]
-              (let [previous (last accum)]
-                (conj accum (build-desc previous item))))
-            [(first input-desc-seq)]
-            (rest input-desc-seq))))
+    (recurse-build-desc (first input-desc-seq) (rest input-desc-seq))))
+
 
 (defn create-network
   "Create the live network modules from the built description"

  (let [io-size (:output-size previous)]
    (assoc item :input-size io-size :output-size io-size)))


(defmethod build-desc :convolutional
  [previous item]

(defmulti build-desc (fn [result item]
                       (:type item)))

(defn recurse-build-desc
  [initial-item desc-seq]
  (reduce (fn [accum item]
            (let [previous (last accum)]
              (conj accum (build-desc previous item))))
          [initial-item]
          desc-seq))

(defmethod build-desc :input
  [previous item]
  item)
