Keras modèle.résumé() de l'objet string
Je veux écrire un *.fichier txt avec le réseau de neurones hyperparameters et de l'architecture du modèle. Est-il possible d'écrire le modèle d'objet.résumé() de mon fichier de sortie?
(...)
summary = str(model.summary())
(...)
out = open(filename + 'report.txt','w')
out.write(summary)
out.close
Il se trouve que je suis "None" comme vous pouvez le voir ci-dessous.
Hyperparameters
=========================
learning_rate: 0.01
momentum: 0.8
decay: 0.0
batch size: 128
no. epochs: 3
dropout: 0.5
-------------------------
None
val_acc: 0.232323229313
val_loss: 3.88496732712
train_acc: 0.0965207634216
train_loss: 4.07161939425
train/val loss ratio: 1.04804469418
Aucune idée de comment faire face à cela?
- Je n'ai pas l'obtenir. d'abord le
None
semble être dans le milieu du fichier, mais 1) vous êtes de tronquer votre fichier lors de son ouverture, puis de le fermer (ne fonctionne pas: vous avez oublié le ()). Pouvez-vous imprimer votre résumé dans le programme? si c'estNone
, alors le problème est ailleurs. - Merci pour votre réponse Jean, oui, j'ai oublié l' (), mais je l'ai dans le code original, désolé. La chose est, qu'est-ce que le modèle.résumé() dans keras et comment transformer une chaîne de caractères afin que je puisse l'écrire sur un fichier?
- J'ai eu ce problème. J'en ai conclu que le but de
model.summary()
est à la sortie d'affichage à l'écran. Ne pas créer de réel contenu de texte qui peut être écrit ou affectée à une variable. C'est pourquoi, lorsque vous appelez la fonction renvoieNone
. - De la documentation, "à Propos de Keras modèles": "
model.summary()
: imprime un résumé de la représentation de votre modèle." - L'aide est sur le chemin!
model.summary()
a été mise à jour pour inclure un argument appeléprint_fn
, qui personnalisé de fonctions d'impression de sorte que vous pouvez capturer le résumé de chaîne. Bien qu'il n'est pas sorti de Keras 2.0.5, il peut être dans la prochaine version. Il est disponible sur GitHub dans le temps. - Mise à jour: on dirait qu'il est en Keras 2.0.6. Voir wkretzsch la réponse ci-dessous.
Vous devez vous connecter pour publier un commentaire.
Avec ma version de Keras (
2.0.6
) et Python (3.5.0
), cela fonctionne pour moi:Cette fonction génère les lignes suivantes dans le fichier:
line_length
comme un argument supplémentaire pour peaufiner long de la ligne de sortie sera. Ceci est utile, car parfois le nom de la couche est trop long et il est donc découpé:model.summary(line_length=80, print_fn=lambda x: fh.write(x + '\n'))
Pour moi, cela a fonctionné pour obtenir juste le modèle de résumé comme une chaîne de caractères:
Et si vous voulez écrire pour un journal:
Ce n'est pas la meilleure façon de le faire, mais une chose que vous pouvez faire est de rediriger la sortie standard:
voir "Comment faire pour rediriger "imprimer" de la sortie vers un fichier à l'aide de python?"
Une option, bien que n'étant pas un remplacement exact pour le modèle.résumé, est d'exporter un modèle de configuration à l'aide de
model.get_config()
. De les docs:Je suis tombé sur le même problème que bien!
Il existe deux solutions possibles:
Utilisation
to_json()
méthode du modèleC'est votre cas ci-dessus.
Sinon, utilisez le mode ascii de keras_diagram
Je comprends que l'OP a déjà accepté winni2k réponse, mais la question du titre implique réellement sauver les sorties de
model.summary()
à un chaîne, pas un fichier, le code suivant peut aider les autres qui viennent à cette page à la recherche pour que (comme je l'ai fait).Le code ci-dessous a été exécuté à l'aide de TensorFlow
1.12.0
, qui est livré avec Keras2.1.6-tf
sur Python3.6.2
.Qui rendements (comme une chaîne de caractères):