J'essaie de compresser deux [[Float]]
tableaux, puis de préformer un calcul sur chaque élément. Le tableau compressé résultant aura le type [([Float], [Float])]
, je pense.
Mais je continue à recevoir une erreur où Haskell me dit:
[1 of 1] Compiling Mod ( Mod.hs, interpreted )
NN.hs:38:42:
Couldn't match type ‘[Float]’ with ‘Float’
Expected type: [Float]
Actual type: [[Float]]
In the second argument of ‘zip’, namely ‘bs’
In the second argument of ‘map’, namely ‘(zip ws bs)’
Failed, modules loaded: none.
Je n'arrive pas à comprendre un MCVE, car c'est ce que si (un peu / sorta) essayait de faire:
feedforward :: ([[Float]], [[Float]]) -> Float -> [Float]
feedforward (ws, bs) a = map (equation a) (zip ws bs)
where equation a (w, b) = (sum $ zipWith (*) w b) + a
Mais cela compile réellement! Alors que mon vrai code ressemble à ceci:
data NNetwork = NNetwork { nlayers :: Int
, sizes :: [Int]
, biases :: [[Float]]
, weights :: [[Float]] }
deriving (Show, Ord, Eq)
toFloat x = fromIntegral x :: Float
sig :: Float -> Float
sig a = 1 / (1 + exp (-a))
feedforward :: NNetwork -> Float -> [Float]
feedforward net a = map (eq22 a) (zip ws bs)
where bs = biases net
ws = weights net
dot a b = sum $ zipWith (*) a b
rep a b = replicate (length a) b
eq22 a (w, b) = sig $ (dot w (rep w a)) + b
Et pourtant ça ne marche pas !
- Merci d'avance
Le problème est:
eq22 :: Float -> ([Float], [Float]) -> Float
eq22 a (w, b) = sig $ (dot w (rep w a)) + b
Sauf que dans ce contexte b
est un [Float]
et utilisé comme un Float
(voir + b
). Voulez-vous dire une sorte de fonction terminée b
?
De plus, ce ne sont pas des tableaux, mais des listes.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots