Suite

Sortir le même nom que l'entrée à l'aide de Copier des fonctions dans ModelBuilder ?


J'utilise ModelBuilder pour itérer l'analyse de l'installation la plus proche pour chaque bâtiment d'un site archéologique (la matrice de coût OD n'est pas ce dont j'ai besoin - j'ai besoin de la sortie géométrique, pas seulement d'un tableau de matrice de coût). Mon projet de modèle est ci-dessous. Une question : à la fin du modèle, il prend les routes générées à partir de l'analyse de l'installation la plus proche et les copie dans une nouvelle classe d'entités. Cependant, l'outil Copier les fonctionnalités semble nécessiter un nom spécifique pour la sortie. Lorsque j'itère jusqu'à l'installation suivante, cela écrasera ou cassera le modèle.

La question est donc simple : comment puis-je configurer l'outil Copier des fonctionnalités pour afficher le nom de l'itération correspondante (pris à partir du champ ObjectID de l'itération de la sélection de fonctionnalités) ?


La substitution de variables en ligne est ce que vous recherchez. Vous pouvez utiliser la sortie « Valeur » de la sélection d'entités d'itération pour étiqueter de manière unique la sortie. Dans la classe d'entités en sortie des entités de copie, utilisez %Value% pour attribuer un nom différent à chaque itération.

Par exemple, définissez la sortie sur [votre emplacement de sortie]\%Value%'

Voir la page d'aide d'ESRI pour plus d'informations sur la façon dont cela fonctionne. Exemple 2 est ce que vous voulez


Modèle de régression Tensorflow donnant la même prédiction à chaque fois

Dans ce code, j'essaie de prédire les notes M obtenues par un élève dans un test sur 50 compte tenu du nombre d'heures qu'il a dormi, étudié, utilisé de l'électronique et joué la veille du test. Ces 4 caractéristiques relèvent du vecteur de caractéristiques d'entrée x.

Pour résoudre ce problème de régression, j'utilise un réseau de neurones profonds avec une couche d'entrée avec 4 perceptrons (les caractéristiques d'entrée), une couche cachée avec deux perceptrons et une couche de sortie avec un perceptron.

J'ai utilisé sigmoïde comme fonction d'activation. Mais, j'obtiens exactement la même prédiction ([[50.0]]) pour M pour tous les vecteurs d'entrée possibles que j'alimente.

Quelqu'un peut-il me dire ce qui ne va pas avec le code ci-dessus et pourquoi j'obtiens le même résultat à chaque fois ?


2 réponses 2

. comment se fait-il que nous puissions encore entendre plusieurs sons différents du haut-parleur car ils sont distincts.

Chaque oreille entend la somme des oscillations de la pression acoustique sur le tympan. Il n'y a qu'un seul signal ressenti par le tympan mais notre cerveau peut clairement identifier les multiples sources d'une pièce musicale ou d'une voix sur un bruit de fond.

Les signaux sonores électriques analogiques sont exactement cela - un analogique. La tension monte et descend comme une analogie de la pression acoustique sur le microphone, etc.

Figure 1. Trois ondes sinusoïdales individuelles et leur somme. Si vous frappez trois diapasons de fréquence différents, les sinus représenteraient la forme d'onde audio de chacun et la courbe jaune représenterait la somme de ceux atteignant l'oreille. Dans leur forme électrique, le processus est le même.

D'une manière ou d'une autre, la carte son ne mélange pas les données audio entrantes simultanées.

Et le plus déroutant, imaginez que l'on exécute trois programmes où tous produisent un son différent. Mais à la fin il n'y a qu'un seul courant qui traverse le haut-parleur.

La carte son additionne les signaux qu'elle reçoit. Pour l'audio de qualité CD, la carte son effectuera une conversion numérique-analogique à > 40 kHz, de sorte que les trois flux de données devraient également arriver à cette fréquence. Chaque échantillon de chaque source serait mis en mémoire tampon (car ils arrivent en série dans votre exemple), additionné et converti en un échantillon de sortie analogique.

De quoi est composé ce courant ? Est-ce l'ajout de trois formes d'onde différentes ? Si oui sont-ils ajoutés dans la carte son ou avant ?

Généralement, cela se ferait numériquement, mais il pourrait y avoir un mélangeur analogique pour des applications spéciales.

La carte son traite-t-elle en parallèle et les ajoute-t-elle à la fin ?

Pour une simple somme de trois signaux, il faudrait : Tamponner toutes les entrées pour un échantillon. Additionnez-les. Sortir la valeur analogique de la somme. Cependant, cela peut devenir bien plus compliqué que cela. Votre mélangeur audio Windows, par exemple, vous permet d'ajuster le volume de chaque source sonore afin qu'il y ait une multiplication sur chaque signal avant la sommation. Les commandes de tonalité ajouteraient une autre couche de complexité croissante et tous les effets dépendants du temps tels que la réverbération, l'écho, le chorus, le changement de hauteur, etc., nécessiteraient beaucoup plus de calculs sur chaque signal avant la conversion en analogique.

Figure 2. Schéma fonctionnel de la carte son par Alexander Pimpas.

L'image Web aléatoire ci-dessus montre plusieurs fonctionnalités. Je ne peux pas garantir sa précision ou son âge.

  • Notez que l'entrée et la sortie audio sont connectées à un mélangeur audio. Cela implique que le micro, l'entrée ligne ou la sortie audio CD pourraient être envoyés à la sortie audio sans aucun traitement numérique. Ils pourraient également être mélangés avec l'audio numérique.
  • On peut voir des blocs ACD (analogique vers numérique) et DAC (numérique vers analogique) interfaçant les domaines numérique et analogique.
  • Le Waveblaster est un synthétiseur MIDI qui va générer des instruments synthétiques basés sur les données MIDI.

Comment la carte son traite-t-elle les différents signaux audio entrants avant de les sortir simultanément sur le même haut-parleur ?

Je vais juste commencer par un bref texte de présentation sur quelle une carte son le fait. La carte son peut stocker, mixer, traiter et tamponner le son. Seules l'entrée analogique (si présente) et les sorties non numériques partagent le même "type" de signal que le haut-parleur reçoit. La connexion au processeur ainsi que toutes les entrées ou sorties fibre optique ou HDMI sont toutes numériques et sont capables de transmettre beaucoup plus de données que ce qui est nécessaire pour un seul signal audio. La norme PCI Express la plus lente est capable de 250 Mo/s et un seul canal audio de qualité CD n'utilise que 705,6 Kbps, donc une voie PCI express sans surcharge peut suivre environ 2,8 millions de signaux audio de qualité CD, donc obtenir des informations vers et depuis la carte n'est pas un problème.

Un programme exécute un code, après de nombreuses étapes au niveau binaire/transistor, l'audio est finalement envoyé du CPU à la carte son dans le domaine numérique. La carte son traite ensuite ces informations entrantes en signal analogique et amplifie et sort vers un haut-parleur.

Les programmes exécutés sur l'ordinateur déterminent quels signaux audio doivent être lus et à quel moment. Les données représentant des signaux audio doivent provenir d'un stockage lent et être conservées en mémoire.

Tous les signaux destinés à être joués en même temps doivent être traités et mixés, ce qui peut être fait par le CPU ou la carte son. Presque toutes les cartes son sont capables de mélanger un grand nombre de canaux, mais plus une carte son est bonne et récente, plus elle peut effectuer des traitements importants, des choses comme la conversion en audio directionnel, les effets d'écho ou de pièce et la normalisation pour alléger la charge de traitement le processeur et/ou de fournir une expérience de meilleure qualité. Pour mélanger deux signaux audio, ils doivent être convertis dans un format compatible (s'ils sont stockés compressés), l'amplitude des signaux à chaque instant peut être additionnée (littéralement additionnée) puis normalisée (volume ajusté car cela double l'amplitude effective) . Vous devez soit avoir de la marge (espace de stockage et capacité à traiter des nombres plus importants que les signaux d'origine contenus) ou normaliser avant la sommation, ce qui pourrait réduire la résolution du signal s'il n'est pas fait correctement.

Sachant que le CPU est un processeur série, comment se fait-il qu'on puisse encore entendre plusieurs sons différents du haut-parleur car ils sont distincts. D'une manière ou d'une autre, la carte son ne mélange pas les données audio entrantes simultanées. Et le plus déroutant, imaginez que l'on exécute trois programmes où tous produisent un son différent. Mais à la fin il n'y a qu'un seul courant qui traverse le haut-parleur.

Une fois que l'audio a été traité et mixé, il est toujours sous forme numérique et comme la carte son produit la sortie réelle (1 signal numérique par canal de sortie), il ne serait pas efficace de concevoir la carte son pour produire cette sortie exactement au bon taux, donc il est mis dans une mémoire tampon quel que soit le taux auquel il est produit. La sortie est ensuite convertie en analogique à partir de la mémoire tampon au taux correct et cette sortie est ce qui va à la prise casque de votre ordinateur.

De quoi est composé ce courant ? Est-ce l'ajout de trois formes d'onde différentes ? Si oui sont-ils ajoutés dans la carte son ou avant ? Est-ce que la carte son traite en parallèle et les ajoute à la fin ?

Le courant est composé d'électrons en mouvement. Oui, les formes d'onde sont littéralement ajoutées (n'importe quel nombre peut être mélangé simultanément, vous pouvez donc utiliser (Signal1+Signal2+Signal3+Signal4+Signal5)/5 = Signal de sortie plutôt que de les additionner 2 à la fois.), et cela peut être fait par le processeur ou la carte son. Il peut s'agir de l'application, du système d'exploitation ou de la carte son effectuant le traitement.

Je vais juste ajouter un exemple pour le mettre ensemble. Vous avez un jeu de tir à la première personne en cours d'exécution, un lecteur MP3 jouant de la musique connecté à la prise d'entrée auxiliaire et plusieurs autres programmes en cours d'exécution qui fournissent des notifications sonores. Vous avez des haut-parleurs 5.1 canaux connectés à votre ordinateur.

Le lecteur MP3 fournit l'audio à un CAN dans la carte son, qui convertit le signal en numérique et le transmet au pilote audio, qui fournit un réglage du volume, et peut également diviser l'audio 2 canaux en audio 5.1 canaux (pour le faire jouer sur tous les haut-parleurs 5.1 au lieu des seuls avant gauche et avant droit), auquel point le signal est prêt à être émis. Le processeur peut soit effectuer lui-même le réglage du volume et le fractionnement, soit fournir des paramètres à la carte son à la place.

Chacun des programmes utilisant des notifications sonores fournira un réglage du volume, mai divisez l'audio en plusieurs canaux s'il provient d'un fichier mono et transmettez-le au pilote audio, qui peut fournir un deuxième réglage du volume et/ou le diviser en audio 5.1 canaux, auquel cas le signal est prêt à être émis. Encore une fois, le processeur peut soit exécuter les fonctions de traitement, soit les transmettre à la carte son.

Enfin, vous avez votre jeu de tir FPS en cours d'exécution, et il fonctionne en mode canal 5.1 natif. À tout moment, nous dirons qu'il joue en moyenne 15 sons différents, ambiances, bruits gris, moteurs en marche, bruits de pas, coups de feu et échos ou quelque chose du genre. Parce que tous ces sons sont stockés dans des fichiers wave normalisés, une fois que le son a été chargé en mémoire, vous ne pouvez pas simplement l'envoyer à la carte son au bon moment car la direction et la distance doivent être prises en compte, donc les sons directionnels doivent avoir leur volume est modifié en fonction de la distance et divisé en canaux corrects pour être joués sur les haut-parleurs corrects. Tous ces sons doivent être mixés, ce qui peut encore être fait par le CPU ou la carte son. Enfin les données peuvent subir un ajustement de volume. Cette application (gaming), en particulier, peut représenter une charge de travail considérable, et avoir la carte son effectuer ces tâches plutôt que le processeur est bénéfique. À ce stade, le signal du jeu est prêt à être émis.

Nous avons maintenant trois flux audio provenant de programmes différents, qui, encore une fois, doivent être mixés, normalisés et le réglage du volume principal effectué. Chacun de ces flux audio peut être à 2 canaux ou à 5.1 canaux. Si ni le système d'exploitation ni la carte son ne reçoivent l'instruction de diviser les 2 canaux en 5.1, les deux canaux sont mixés avec les haut-parleurs avant gauche et avant droit.

Une fois que tout cela est fait, vous avez 6 signaux émis vers leur propre DAC, chacun étant constitué d'un mélange de plusieurs.


Prédire donne la même valeur de sortie pour chaque image (Keras)

J'essaie de classer les images et de leur attribuer l'étiquette 1 ou 0. (Cancer de la peau ou non).

Je suis conscient des trois principaux problèmes concernant le fait d'avoir la même sortie dans chaque entrée.

Je n'ai pas divisé le décor et j'essaie juste d'appliquer le CNN sur le train, je sais que ça n'a pas de sens mais c'est juste pour vérifier comment ça marche. (La prédiction sur les données non étiquetées donne exactement la même probabilité)

J'ai vérifié les trois points principaux :

1 : Mise à l'échelle de la date (à la fois la taille de l'image et les valeurs d'intensité des pixels) 2 : Prendre un faible taux d'apprentissage 3 : J'ai seulement essayé avec de petites époques 6 au maximum à cause du temps de calcul, est-ce que ça vaut le coup de le laisser fonctionner un jour juste pour voir les résultats avec plus d'époques ?

De toute façon je n'arrive pas à comprendre comment un mauvais entraînement pourrait amener le réseau à donner la même probabilité de classe à chaque fois ?

J'ai essayé les options par lots, etc. ne change rien.

La précision est très faible car ce type de classification n'est pas vraiment adapté aux CNN, mais cela ne devrait cependant pas expliquer le résultat étrange.

Voici mon production :

Voici les différentes parties du programme : Modèle :


Puis-je avoir des valeurs de sortie de réseau neuronal >100 ?

Tous les échantillons et articles que j'ai vus ont tous des sorties de 1 ou moins. Y a-t-il une raison cachée pour laquelle personne n'utilise NN pour produire des entiers de valeur plus élevée ?? Ma situation est que je veux que NN prédise la valeur exacte du résultat plutôt qu'un -1

Si j'ai un NN avec disons 4 entrées et 1 sortie avec Round 1 Input: 51,22,35,43 Output: 847 Round 2 Input: 25,31,46,29 Output: 761 Je veux Round n Input: 51,33 ,19,27 Sortie : . (valeur attendue)

J'ai lu que GA est meilleur dans la formation NN mais peu d'exemples ont été fournis pour guider les débutants comme moi. Je n'ai pas encore vu d'article détaillé sur la façon de procéder. En utilisant le même exemple ci-dessus, si j'obtiens les (presque) meilleurs poids de la première évolution en utilisant la valeur d'erreur du tour 1, dois-je ajouter le poids en tant que parents dans la prochaine génération pour le tour 2 ?? Comment puis-je m'assurer que le meilleur chromosome des séries précédentes ne meurt pas après cette génération.

Des liens vers des articles existants et des explications détaillées seront très appréciés. Merci.


1 réponse 1

Il semble supposer que l'enseignant force pendant la formation (c'est-à-dire qu'au lieu d'utiliser la supposition du décodeur pour une position comme entrée de l'itération suivante, il utilise le jeton connu.

Le terme « forçage par l'enseignant » me dérange un peu, car il manque un peu l'idée : il n'y a rien de mal ou de bizarre à alimenter le prochain jeton connu au modèle RNN - c'est littéralement la seule façon de calculer $log P(y_1, ldots, y_N)$ . Si vous définissez une distribution sur des séquences de manière autorégressive comme $P(y) = prod_i P(y_i | y_<<i>)$ comme cela se fait couramment, où chaque terme conditionnel est modélisé avec un RNN, alors "le forçage par l'enseignant" est celui vraie procédure qui maximise correctement la vraisemblance du log. (J'omet d'écrire la séquence de conditionnement $x$ ci-dessus car cela ne change rien.)

Compte tenu de l'omniprésence du MLE et du manque de bonnes alternatives, je ne pense pas qu'il soit répréhensible de supposer que le « forçage des enseignants » est répréhensible.

Néanmoins, il y a certes des problèmes avec cela - à savoir, le modèle attribue une probabilité élevée à tous les points de données, mais les échantillons du modèle ne sont pas nécessairement probables dans la vraie distribution des données (ce qui entraîne des échantillons de "faible qualité"). Vous pourriez être intéressé par "Professor Forcing" (Lamb et al.) qui atténue cela via une procédure de formation contradictoire sans abandonner MLE.

Cela ne pénaliserait pas les longues séquences. Étant donné que la probabilité est de 1 à N de la sortie, si le décodeur générait une séquence plus longue, tout ce qui se trouvait après le premier N ne serait pas pris en compte dans la perte.

Si le modèle prédit un jeton de fin de chaîne précoce, la fonction de perte exige toujours N étapes, ce qui signifie que nous générons des sorties basées sur une "variété" non entraînée des modèles. Cela semble bâclé.

Ni l'un ni l'autre de ces problèmes ne surviennent pendant l'entraînement. Au lieu de considérer un modèle de séquence autorégressif comme une procédure pour produire une prédiction, pensez-y comme un moyen de calculer la probabilité d'une séquence donnée. Le modèle ne prédit jamais rien - vous pouvez échantillonner une séquence ou un jeton d'une distribution, ou vous pouvez lui demander quel est le prochain jeton le plus probable - mais ceux-ci sont fondamentalement différents d'une prédiction (et vous n'échantillonnez pas pendant la formation Soit).

Si oui, y a-t-il eu des progrès vers une fonction de perte plus avancée ?

Il peut bien y avoir des objectifs spécifiquement conçus au cas par cas pour différentes tâches de modélisation. Cependant, je dirais que MLE est toujours dominant - le récent modèle GPT2 qui a atteint des performances de pointe sur un large éventail de tâches de modélisation et de compréhension du langage naturel a été formé avec lui.


Ajout de contexte dans un modèle RNN seq2seq

Une couche RNN (ou un empilement de celle-ci) joue le rôle de "codeur" : elle traite la séquence d'entrée et renvoie son propre état interne. A noter que nous écartons les sorties de l'encodeur RNN, ne récupérant que l'état. Cet état servira de "contexte", ou "conditionnement", du décodeur à l'étape suivante.

Suivant la terminologie habituelle et la mise en œuvre dans le lien fourni, le contexte de l'encodeur est désigné par [c,h], où,

  • c est l'état interne du codeur au dernier pas de temps
  • h est l'état caché (sortie) du codeur dans le dernier pas de temps

Si l'on souhaite ajouter un contexte externe e, quelle serait une manière raisonnable de le faire ?

  • Générer un nouveau contexte en utilisant une architecture NN avec des entrées [c,h,e] ?
  • Concaténer le contexte de l'encodeur et le contexte externe [(c,e),(h,e)]?
  • Une autre suggestion ?

Pour clarifier le problème, supposons que l'on veuille prédire la trajectoire future d'un objet en se basant sur des positions passées et en utilisant la localisation des obstacles comme contexte externe


D'une manière complexe qui n'est qu'approximativement linéaire.

Tout d'abord, vous avez le frottement statique - aux cycles de service les plus bas, le moteur ne bougera pas jusqu'à ce qu'il surmonte le frottement statique, et une fois qu'il bouge, le frottement dynamique est plus faible, de sorte qu'il atteindra immédiatement un régime un peu plus élevé que vous pourrait alors diminuer l'abaissement du cycle de service (donc, un effet d'hystérésis, zéro sur la rampe montante, décroissant RPM sur la rampe descendante).

Ensuite, les pertes et l'efficacité commencent à jouer un rôle, le frottement dynamique décale la courbe de y = ax d'une certaine valeur, les pertes de champ magnétique feront plier la courbe, car les intensités de champ très faibles et très élevées créent plus de pertes magnétiques que "nominales" ( le champ du rotor s'étendant à l'extérieur du stator et court-circuitant à travers les éléments structurels et l'air), et à un régime plus élevé, le frottement visqueux du lubrifiant dans les roulements et la traînée d'air appliqueront un facteur de chute de régime quadratique. Ajoutez à cette réponse aux changements rapides d'entrée retardés par l'inertie du rotor, ajoutez des réactions d'induction dues aux changements rapides de tension de PWM, et vous obtenez un modèle suffisamment complexe, il ne sert à rien d'essayer d'écrire des équations exactes - soit appliquez l'approximation linéaire accepter l'erreur résultante ou mesurer la réponse et créer une table de recherche pour les valeurs d'entrée:sortie.


1 réponse 1

Votre logiciel implique que les broches Arduino 3, 4 et 5 sont connectées au CD4051, mais votre schéma ne le montre pas. Êtes-vous sûr que ces connexions sont correctes ? Pouvez-vous vérifier que les trois lignes AD0 commutent comme vous le souhaitez ? Le CD4051 est un analogique commutateur, ce qui signifie que les broches désélectionnées sont circuit ouvert. Utilisez-vous des résistances pull-down pour vous assurer que les lignes AD0 sont considérées comme un "0" logique lorsqu'elles ne sont pas sélectionnées ?

La résistance pulldown doit être suffisamment petite pour qu'elle puisse surmonter tous les courants de fuite qui tentent de tirer la broche vers le haut - et également décharger la capacité du nœud assez rapidement - mais pas si petite que le lecteur passant par le CD4051 ne peut pas vaincre la résistance. Pour la logique CMOS, les valeurs comprises entre 10K et 100K sont généralement bonnes.

Comme alternative, vous pouvez envisager de passer à un décodeur qui ne tristate pas ses sorties, comme un 74HC138. Cette puce particulière a des sorties actives basses, ce qui signifie que vous devrez changer l'adresse que vous considérez comme l'adresse "active" dans votre firmware.

Il y a un autre problème secondaire que je ne peux pas m'empêcher de commenter. Vous avez écrit votre logiciel en utilisant exclusivement des variables globales. Je suppose que votre formation en programmation est principalement dans le langage BASIC. C'est OK pour les petits projets, mais cela vous causera des problèmes avec tout ce qui est plus complexe. Dans le langage C et ses dérivés, vous voudrez apprendre à utiliser des variables locales dans des fonctions et à utiliser des paramètres et des valeurs de retour pour transmettre des données dans et hors des fonctions sans utiliser de variables globales.


  1. Il vous manque #include <string> . Corrigez cela, ou votre code pourrait ne pas être compilé sur un compilateur différent de celui que vous utilisez actuellement.
  2. N'utilisez pas de tableaux de style C. C++ propose std::array , qui ajoute des fonctionnalités plus pratiques (telles que les itérateurs) et empêche certains bogues désagréables (causés par array-pointer-interconversion, par exemple).
  3. N'utilisez pas de chaînes de style C. Utilisez soit std::string , soit, lorsque vous êtes sûr que la chaîne sous-jacente a une durée de vie suffisamment longue, utilisez std::string_view . Les chaînes C sont intrinsèquement dangereuses et donc déconseillées dans le code C++ moderne.
  4. auto&[div, codeword] devrait très probablement être auto [div, codeword] , puisque vous ne modifiez ni div ni codeword et que les deux sont suffisamment petits pour être efficacement passés par valeur. Cela ne s'applique plus nécessairement, cependant, si vous suivez ma suggestion du point 3.
  5. Utilisez moins en utilisant . . Je suis sûr que vous ne souffrirez pas trop d'écrire std. toutes les quelques lignes, et les personnes qui liront votre code ainsi que le compilateur vous en remercieront (vous évitez également certains bogues ADL désagréables, qui peuvent être très pénibles à déboguer).

Éditer: J'ai supprimé la section sur le retour de std::string car c'était un non-sens total (merci à Sebastian Redl pour l'avoir signalé dans les commentaires).


Voir la vidéo: ArcGIS Model Builder - Selecting your Data (Octobre 2021).