[PYTHON] Je veux utiliser PyTorch pour générer quelque chose comme les paroles de Japari Park

introduction

L'autre jour, le développement de la bibliothèque d'apprentissage en profondeur «Chainer» fournie par Preferred Networks (PFN) est terminé. Dans mon laboratoire, nous sommes divisés en groupe Tensorflow et groupe Chainer, et nous étions en compétition pour les montures les uns avec les autres, mais le groupe Chainer a été éliminé en fin de développement (cela semble tranchant).

Je suis vraiment désolé d'avoir utilisé Chainer habituellement, et en même temps, je suis plein de gratitude pour avoir fourni un cadre facile à utiliser (croyants).

Eh bien, cette société PFN semble passer au développement de PyTorch. De plus, j'entends que PyTorch lui-même a de nombreux aspects similaires à la description de Chainer. Aussi, dans mes recherches, j'ai principalement utilisé CNN et GAN, mais je n'ai pas abordé RNN. .. .. ..

** "C'est une bonne occasion d'apprendre à utiliser PyTroch et comment fonctionne RNN ???" **

J'ai donc emprunté le livre "Deep Learning from Zero ②" au même laboratoire, et emprunté le contenu de RNN. Je l'ai lu tel quel et je l'ai implémenté avec PyTorch. Cet article est un mémorandum.

Eh bien pour être honnête, ** "Je ne comprends pas RNN" ** ** "Je ne sais pas comment utiliser PyTorch" ** ** "Enseignant issu de sages" ** J'ai fait un article parce que ça y ressemble.

Le code source est publié sur Github. ~~ Au fait, je n'ai jamais vu "Kemono Friends". ~~ Je n'ai regardé qu'un seul épisode.

Contenu de cet article

--Apprendre les paroles de Japari Park en utilisant le LSTM de PyTorch

Qu'est-ce que RNN ou LSTM?

RNN est une abréviation de Recurrent Neural Network, qui est un réseau neuronal principalement pour les données de séries chronologiques. Contrairement aux couches de réseau neuronal normales, les couches RNN ont un chemin de boucle qui prend leur sortie comme entrée. Cela permet de conserver les informations masquées pour chaque série chronologique. LSTM est un dérivé de RNN, qui ajoute le concept de porte à la structure de la boucle.

Pour une explication détaillée, voir ici ou ici plutôt que mon explication. C'est beaucoup plus facile à comprendre.

Créer un jeu de données

On dit que la liste de données écrite de manière à ne pas couvrir le mot information dans les données textuelles est appelée "corpus". Il semble que des identifiants soient attribués aux mots de ce corpus pour le rendre plus facile à manipuler en tant que liste d'identifiants. Cependant, cette fois, il était difficile de séparer les mots (utilisez ~~ MeCab ~~), j'ai donc attribué un identifiant à chaque caractère qui apparaît dans les paroles, et ajouté «^» pour indiquer le début et la fin des paroles. J'ai ajouté'_'.

Voici la liste des identifiants et les mots correspondants.

{'^': 0, 'W': 1, 'e': 2, 'l': 3, 'c': 4, 'o': 5, 'm': 6, ' ': 7, 't': 8, 'Yo': 9, 'U': 10, 'Cette': 11, 'Alors': 12, 'le': 13, 'Turbocompresseur': 14, 'Pennsylvanie': 15, 'Li': 16, '-': 17, 'Ku': 18, '!': 19, 'maintenant': 20, 'journée': 21, 'Aussi': 22, 'Faire': 23, 'Tsu': 24, 'Ta': 25, 'Vers le bas': 26, 'Ba': 27, 'Gros': 28, 'Bruyant': 29, 'Gi': 30, 'Mais': 31, 'Mm': 32, 'Haute': 33, 'Et al.': 34, 'Ou': 35, 'À': 36, 'Lol': 37, 'je': 38, 'e': 39, 'Si': 40, 'Fu': 41, 'Les': 42, 'Zu': 43, 'Agitation': 44, '嘩': 45, 'Shi': 46, 'main': 47, 'Su': 48, 'Tsu': 49, 'Chi': 50, 'Ya': 51, 'Moi': 52, 'Naka': 53, 'Bien': 54, 'Ke': 55, 'de': 56, 'Est': 57, 'Rester': 58, 'Nana': 59, 'Livre': 60, 'Cette': 61, 'Amour': 62, 'Ah': 63, 'Ru': 64, 'Ho': 65, 'Tu': 66, 'main': 67, 'À': 68, 'Un': 69, 'alors': 70, 'Ouverture': 71, 'Robuste': 72, '(': 73, 'sensationnel': 74, '・': 75, 'Tsu': 76, 'Su': 77, ')': 78, 'Apparence': 79, 'Ta': 80, 'Dix': 81, 'Homme': 82, 'Couleur': 83, 'Est': 84, 'Fascination': 85, 'Ré': 86, 'Aller': 87, 'soirée': 88, 'Vivant': 89, 'Ciel': 90, 'doigt': 91, 'Quand': 92, 'Lourd': 93, 'Hey': 94, 'Ji': 95, 'bien': 96, 'Connaissance': 97, 'Ri': 98, 'Secouer': 99, 'Mukai': 100, '\u3000': 101, 'À': 102, 'La': 103, 'Bu': 104, 'Le': 105, 'Hmm': 106, 'Pu': 107, 'Œil': 108, 'Vous voyez': 109, 'Seulement': 110, 'Soi': 111, 'Yu': 112, 'Brut': 113, 'Ki': 114, 'Décoration': 115, 'Ku': 116, 'longueur': 117, 'mari': 118, 'Faire': 119, 'Je suis désolé': 120, '♡': 121, 'N': 122, 'i': 123, 'y': 124, 'u': 125, 'Ro': 126, 'Yu': 127, 'visage': 128, 'Attendre': 129, 'Ouvert': 130, 'porte': 131, 'Ge': 132, 'rêver': 133, 'Pennsylvanie': 134, 'mot': 135, 'A continué': 136, 'Gu': 137, 'je': 138, 'ré': 139, 'je': 140, 'Un service': 141, 'Ki': 142, 'Têtu': 143, 'Zhang': 144, 'UNE': 145, 'Sa': 146, 'Oh': 147, 'Ensemble': 148, 'ligne': 149, 'sensationnel': 150, 'Vers le haut': 151, 'un': 152, 'Suspendu': 153, 'la vie': 154, 'B': 155, 'Ze': 156, 'Eh': 157, '、': 158, 'Tour': 159, '?': 160, 'O': 161, 'h': 162, 'est': 163, 'Quoi': 164, 'Aboiement': 165, 'Ouest': 166, 'monde': 167, 'Monde': 168, 'Pendant ~': 169, 'du son': 170, 'UNE': 171, 'Moi': 172, 'De': 173, 'je': 174, ',': 175, 'Collection': 176, 'ami': 177, 'Tatsu': 178, 'Élémentaire': 179, 'ennemi': 180, 'Périple': 181, 'Permanent': 182, '_': 183}

D'une manière ou d'une autre, l'espace pleine largeur est enregistré comme '\ u3000', mais je l'ignorerai pour le moment.

Configuration du réseau

Il s'agit du code source de la classe réseau implémentée par PyTorch.

import torth.nn as nn
class LSTM_net(nn.Module):
    def __init__(self, corpus_max):
        super(LSTM_net, self).__init__()
        self.embed = nn.Embedding(corpus_max, int(corpus_max/3))
        self.lstm = nn.LSTM(input_size=int(corpus_max/3), hidden_size=int(corpus_max/6), batch_first=True)
        self.out = nn.Linear(int(corpus_max/6), corpus_max)
        self.hidden_cell = None

    def init_hidden_cell(self):
        self.hidden_cell = None

    def repackage_hidden(self, hidden_cell):
        self.hidden_cell = (hidden_cell[0].detach(), hidden_cell[1].detach())

    def forward(self, x, t_bptt=False):
        h = self.embed(x)
        all_time_hidden, hidden_cell = self.lstm(h, self.hidden_cell)
        if t_bptt:
            self.repackage_hidden(hidden_cell)
        out = self.out(all_time_hidden[:, -1, :])
       
        return out

De cette façon, le style d'écriture est comme Chainer. Un peu.

Couche d'intégration

Si ma compréhension est correcte, la couche d'incorporation semble être une opération pour extraire la ligne de paramètre de poids correspondant à l'ID. Par conséquent, il n'est pas nécessaire de convertir l'ID en expression unique et d'effectuer une multiplication de poids lors de l'entrée dans la couche entièrement connectée, de sorte que la quantité de calcul est considérablement réduite. .. ..

La couche d'incorporation dans PyTorch est

import torth.nn as nn
nn.Embedding(Nombre total d'identifiants, nombre de dimensions du poids une fois sorti)

Il peut être implémenté avec. (peut être)

À propos du LSTM de PyTorch

Selon here, dans le LSTM de PyTorch, le tenseur d'entrée est tridimensionnel. Cela semble être «(longueur de la série chronologique d'entrée, taille du lot, taille du vecteur)». En définissant batch_first = True lors de la création d'une instance ici Il devient (taille du lot, longueur de la série temporelle à saisir, taille du vecteur) Ensuite, en tant que valeur de retour, toutes les valeurs de sortie obtenues à partir de la longueur de la série temporelle d'entrée et du tuple de la valeur de sortie liée à la dernière fois sont renvoyées.

Je ne peux pas bien le dire avec des mots, mais cela ressemble à la figure ci-dessous.

foward_rnn.png

Par conséquent, ʻall_time_hidden [:, -1,:] et hidden_cell` dans le programme sont pratiquement les mêmes.

Truncated BPTT Dans la rétro-propagation d'erreur RNN, la rétro-propagation comme un réseau neuronal normal est effectuée en suivant le graphique de calcul lorsqu'il est étendu dans la direction horizontale sur l'axe des temps.

C'est ce qu'on appelle la rétro propagation dans le temps (BPTT). (Figure ci-dessous) rnn.png

Mais il y a un problème ici. Autrement dit, la couche devient plus profonde proportionnellement à la longueur de la série chronologique. En général, dans l'apprentissage en profondeur, plus la couche est profonde, plus le gradient disparaît et le gradient explose, et les ressources de calcul augmentent également.

Par conséquent, lorsque vous traitez des données de séries chronologiques longues, tronquez la connexion de rétropropagation à une longueur appropriée (tronquer). L'idée est le BPTT tronqué. (Figure ci-dessous) truncate.png Une chose à noter ici est que la connexion de propagation directe est préservée. C'est-à-dire que lorsque la connexion est interrompue entre le temps t et t + 1, la sortie obtenue au temps t pendant la propagation directe est sortie. Doit être conservée comme valeur d'entrée au temps t + 1.

Le code source correspond aux parties suivantes.

    def repackage_hidden(self, hidden_cell):
        self.hidden_cell = (hidden_cell[0].detach(), hidden_cell[1].detach())

La valeur de sortie obtenue est recréée en tant que nouveau tenseur et le graphe de calcul est temporairement coupé lorsque cette fonction est appelée. .detatch () correspond au rôle de se référer uniquement à la valeur comme .data dans Chainer (probablement).

De plus, comme LSTM a deux sorties, caché et cellule, il est créé avec un taple avec chacun comme élément.

Apprentissage

Pour le moment, je posterai la partie code source qui sera la partie apprentissage.

class Util():
    def make_batch(self, corpus, seq_len, batchsize=5):
        train_data = []
        label_data = []
        for i in range(batchsize):
            start = random.randint(0, len(corpus)-seq_len-1)
            train_batch = corpus[start:start+seq_len]
            label_batch = corpus[start+1:start+seq_len+1]

            train_data.append(train_batch)
            label_data.append(label_batch)

        train_data = np.array(train_data)
        label_data = np.array(label_data)
        return train_data, label_data

class Loss_function(nn.Module):
    def __init__(self):
        super(Loss_function, self).__init__()
        self.softmax_cross_entropy = nn.CrossEntropyLoss()
        self.mean_squared_error = nn.MSELoss()
        self.softmax = nn.Softmax()

def main():
    model = LSTM_net(corpus_max=corpus.max()+1)
    opt = optim.Adam(model.parameters())
    loss_function = Loss_function()
    util = Util()
    
    epoch = 0
    max_seq_len = 16 #Spécifiez la longueur des caractères à couper par propagation arrière
    batch_size = 32

    while True:
        seq_len = 256 #Longueur à découper en apprenant
        train_data, label_data = util.make_batch(corpus, seq_len, batch_size)
        train_data = torch.tensor(train_data, dtype=torch.int64)
        label_data = torch.tensor(label_data, dtype=torch.int64)
        
        loss_epoch = 0    
        count = 0
        for t in range(0, seq_len, max_seq_len):
            train_seq_batch = train_data[:, t:t+max_seq_len]
            label_seq_batch = label_data[:, t:t+max_seq_len]
            out = model(x=train_seq_batch, t_bptt=True)
            loss = loss_function.softmax_cross_entropy(out, label_seq_batch[:, -1])
            opt.zero_grad()
            loss.backward()
            opt.step()    
            loss_epoch += loss.data.numpy()
            count += 1
        loss_epoch /= count
        epoch += 1
        sys.stdout.write( "\r|| epoch : " + str(epoch) + " || loss : " + str(loss_epoch) + " ||")
        
        model.init_hidden_cell()

politique

Je voudrais apprendre à prédire le prochain caractère à partir de l'entrée d'une chaîne de caractères de longueur arbitraire. Cette fois, je vais décider d'une position appropriée à partir des données de paroles, en extraire 256 caractères et faire un BPTT tronqué d'une longueur de 16.

La propagation vers l'avant est conservée jusqu'à ce que model.init_hidden_cell () dans le code source soit appelé. La rétropropagation est effectuée séquentiellement dans un bloc de longueur 16.

La façon de prendre Loss est que la sortie de la dernière entrée est le caractère suivant (représentation unique de l'ID dans) L'entropie croisée Softmax est prise pour qu'elle devienne.

Au fait, cela n'a pas de sens que Loss_function soit une classe (excuses).

résultat

Pour le moment, le code source pour générer les paroles ressemble à ceci.

            index = random.randint(0, corpus.max()-1)
            gen_sentence = [index]
            print(convert.id2char[index], end="")
            for c in range(700):
                now_input = np.array(gen_sentence)
                now_input = torch.tensor(now_input[np.newaxis], dtype=torch.int64)
                out = F.softmax(model(now_input, t_bptt=True), dim=1).data.numpy()[0]
                next_index = int(np.random.choice(len(out), size=1, p=out)[0]) #Échantillonnage aléatoire
                #next_index = int(out.argmax()) #Échantillon de probabilité maximale
                print(convert.id2char[next_index], end="")
                if((c+2)%100==0):
                    print("")
                gen_sentence = [next_index]

Tout d'abord, donnez au model () entraîné l'ID d'une liste de caractères appropriée. Entrez la sortie qui a prédit le prochain caractère à partir de ce caractère et prédisez le caractère suivant. .. .. Les paroles sont générées en répétant les 700 fois ci-dessus. À ce stade, la sortie de model () peut être exprimée comme la probabilité pour chaque ID, donc l'ID avec la probabilité la plus élevée peut être utilisé comme caractère suivant, mais j'ai pensé qu'il serait plus amusant d'avoir le hasard, donc à partir de la distribution de probabilité L'ID de caractère est déterminé sous forme d'échantillonnage.

Graphique de perte

loss.png Descendons autant que nous le ressentons. C'est une sensation désagréable.

Paroles générées

Voici les paroles générées

Yuu te Nishi Yuu? Je vais génial h! Allez, prends soin de moi, vis e Iko o Kuji echo ct doigt e om Kimi Daito livre est un faux papad Un des doigts est t ou ce n'est pas une suite o Il n'y a pas de wa pèse dix tedenrima ♡ Nikala C'est une grande image Petitze je suis un gamin y Takaashi Royaeru Sora Fute Husband e Ya Para h est là! Ritsu ♡ Tomo Kimi lol Ippsou Kisoi Sora ha Ma-ya l Wait! C La e Kujii Guru Day! E Imoku Ima e Yoikora Keiya Kumo Repa aujourd'hui lc Lava is empty Tar length (Ru line Chikaoi) Isu Innocent Suguba Het Li t I Standing Utsubakoru Puyatsu h I Utta Supate Line W Oc me Nora de c Soka Hero Hand Yes et Ra Sa O Toban Ryoyuki Talking friend I (Kekun blasphemy eo day 1 c tekoyaen west ipu so te te te te te te te te te te te te te te te te te te te te te te te te Tatsukamu Koro o Pa h Yuken La La La La, Papu h no Pusa! Ta t Higashi Chii u Sosashi no Ryo Do Waiting W obstinément à regarder l'amour Supa Manju ou à décorer I) La vie de Heri est bonne pour moi m Yohasu! E Makakari) Ba-kun est celui que je suis! Chika (Teda no Miru Ba o Chi W décoration t Hibiki to ni e Bonne chance étudiant et autres! Laig! Il a dix ans, mais c’est une lara, et c’est une ligne, c’est un œil, c’est un visage N, c’est un jour, c’est un rugissement, c’est des aboiements, je ris, a) Je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé, je suis désolé To-kun Ro-ta-ra-kun to Guive (Nen! Ouais, même avec un visage

Eh, tu es aussi un ennemi, je suis fasciné par la porte (portail) Moto) Tu peux aussi la décorer, et c'est bon de rire (Idozo ♡) Ravi d'accueillir le parc Japari! Parce que c'est dix personnes et dix couleurs, si vous posez doucement vos doigts sur le ciel crépusculaire qui se fascine les uns les autres, ravi de vous rencontrer, je veux en savoir plus sur vous! Hé, tout le monde est libre de prendre vie. Vous êtes aussi une décoration. C'est une pièce décousue. Monishi Je suis un serval de Dovalcat! Je ferai de mon mieux! Je laisserai Arai-san! Tout le monde ira. Je ferai de mon mieux si je ne vise pas le sommet. Va au rock. Eh bien, je suis déjà raide (Ravi de vous rencontrer quand je me rassemble, je veux en savoir plus sur vous! Gao! Continuez ici ici, bienvenue dans votre parc Japari! Merci à partir d'aujourd'hui, soyez toujours gentil avec moi Souriez La porte ouverte (porte) qui vous attendait Si vous parlez beaucoup de rêves, cela continuera pour toujours Grand voyage Komukai! Haji auto-doigt Soja aboyant Wooney Voici Japari Park Je suis un serval de Sabal Cat Quand? Lalala Gather et Lupar! A partir d'aujourd'hui, j'ai hâte de vous voir, mais toujours un doux sourire La porte ouverte qui vous attendait (Si vous parlez beaucoup de Gate Yumeko) Faites ici une si grande aventure (je suis Chinrama-kun, je suis serval, Arai, qui est au crépuscule)

Wow! Mitoroki Masu Je vais faire du rock, hein, est-ce réel? Oh hurlant de l'est melcome au parc Japari! Lalalala couleur lc Bienvenue au parc Ohe Japari -! C'est bon pour faire demi-tour -Je ferai de mon mieux -Je laisserai Arai-san! Tout le monde ira Je ferai de mon mieux si je ne vise pas plus haut Je vais basculer, est-ce vrai? Oh Higashi Hurlement à l'ouest Hurlement à l'ouest Résonne partout dans le monde Safari Melody Bienvenue à Bienvenue au parc Japari! Bienvenue à Bienvenue au parc Japari! Bienvenue à Bienvenue au parc Japari! Ravi de vous rencontrer à partir d'aujourd'hui Toujours un sourire doux Porte ouverte (porte) Ici et là, le parc Soko Niso Japari! Aujourd'hui aussi, l'agitation de Dottan Battan s'est empilée et la porte de vous s'est ouverte) La Howling à l'ouest Résonne partout dans le monde Safari Melody Bienvenue au Welcome Japari Park! Ravi de vous rencontrer, toujours un doux sourire La porte ouverte qui vous attendait Si vous parlez beaucoup de rêves, cela continuera pour toujours Grand voyage C'est Japari Park Je suis un serval d'un chat serval! Je ferai de mon mieux, je laisserai Arai-san! Tout le monde ira, je ferai de mon mieux si je ne vise pas plus haut, j'irai au rock, est-ce réel? Oh, hurle à l'est, hurle à l'ouest Résonnez partout dans le monde Safari Melody Bienvenue dans Welcome to Japari Park!

Si vous vous retournez, vous aurez des problèmes ici et là. C'est un gâchis. C'est un gâchis. C'est un gros problème. Tout le monde semble vivre librement. Vous n'avez pas à le décorer. Ravi de se rencontrer. vous Japari Park! Ravi de vous rencontrer à partir d'aujourd'hui Toujours un sourire doux La porte ouverte qui vous attendait toujours Grand voyage qui se poursuivra pour toujours si vous parlez beaucoup de rêves C'est Japari Park Je suis un serval d'un chat serval Je ferai de mon mieux, je laisserai Arai-san! Tout le monde ira, je ferai de mon mieux si je ne vise pas plus haut, j'irai rocker, hein, hurler à l'est, à l'ouest Hurlez, faites écho partout dans le monde Safari Melody Bienvenue dans Welcome to Japari Park! Même aujourd'hui, le bruit de Dottanbattan, c'est dix personnes et dix couleurs, donc si vous posez doucement vos doigts sur le ciel fascinant au crépuscule, je veux en savoir plus sur vous! Si vous vous retournez, vous aurez des ennuis ici et là. C'est un gâchis, c'est un gâchis, c'est un gâchis, c'est un gros problème, tout le monde vit librement. Vous n'avez pas à le décorer non plus (Haidouzo ♡) Ravi de vous rencontrer Japari Park! Ravi de vous rencontrer à partir d'aujourd'hui. Toujours un doux sourire. La porte ouverte qui vous attendait. Si vous parlez beaucoup de rêves, cela continuera pour toujours. Grand voyage C'est Japari Park Je suis un serval d'un chat serval! Je ferai de mon mieux! Je laisserai Arai-san! Tout le monde ira. Je ferai de mon mieux si je ne vise pas plus haut.

Wow, surapprentissage, amusant (vrai visage)

finalement

C'était la première fois que je publiais un article cette fois, il y avait donc de nombreuses parties qui étaient pauvres ou difficiles à comprendre. Cependant, je n'ai pas la motivation de le réécrire, alors postez-le tel quel. Je vais être gâché par des bénévoles.

Nous attendons vos conseils et suggestions en cas d'erreur.

kibounoasa

prime

C'est le résultat de la génération automatique des paroles de diverses chansons dans un jeu de données. Quel genre de chanson y a-t-il?

Parce que c'est tellement fascinant, si vous posez doucement vos doigts sur le ciel crépusculaire, je veux en savoir plus! Gao! Si vous vous retournez, vous aurez des ennuis ici et là. C'est le bordel. Il semble que tout le monde vit librement. Vous n'êtes pas obligé de le décorer non plus. Ravi de vous rencontrer Japari Park! Lalalala Oh, Bienvenue au parc Japali! Lalalala Lalala Lala Bienvenue au parc Japali! Il semble que tout le monde vit librement. Vous n'avez pas besoin de le décorer non plus. Ravi de vous rencontrer Japari Park! Ravi de vous rencontrer à partir d'aujourd'hui. Toujours un sourire doux Ouverture qui vous attendait toujours Gate: Si vous parlez beaucoup de vos rêves, cela continuera pour toujours Grand voyage Oh Hurlement à l'est Hurlement à l'ouest Résonne partout dans le monde Safari Melody-Bienvenue à Welcome Japari Park! Bienvenue à Welcome Japari Park! Bienvenue à Bienvenue à Bienvenue à Bienvenue à Japari Park! Bienvenue à Bienvenue à Japari Park! Bienvenue à Bienvenue à Japari Park! Aujourd'hui aussi, Dottan et le bruit! Gao! Gorogoro Danois Waku Waku Uzuru Slapstick Noronoro Ah? Urouro Ateku Teku Kosokoso Rugosité Sunsun Oh? Peropero Oups Mogumogu Kirakira Guine Pika Pika Picone Mofumofu Nadade Niko! Duveteux, duveteux, duveteux, vous appelez votre nom, duveteux, duveteux, vous riez, Dieu qui vous fait sourire, merci, parce que je suis heureux de vous rencontrer même avec le mal du destin, ce n'est pas bon. Tu vois, mon cœur évolue, de plus en plus, ce n'est pas juste, je me regarde toujours, je sais que mon existence en toi n'est pas aussi grande que toi en moi, mais maintenant A ce même moment, si vous avez le sentiment de partager, Yamato Nadeshiko! Pour faire court? Dust et Nadoko Yamato! Si vous lève les yeux vers vous, c'est trop brillant et trop brillant. Je pense à vous. Dieu qui fond à cause de ça. Merci. Voyant que j'ai pu vous rencontrer même avec un méfait du destin. Pendant longtemps, Dunpapapapapapapa Pupper Paddon Oups Tan Don Dodo? Dodin Don Dodo?! Dopapa Donnu! Tu ne fais pas ça? Dodin Don Dodo?! Dopad Don Doun Shakin Dentan s Gorogorotan Dojan! Aha, une lumière (Ouais) brille, choisit les mots, et même quand c'est difficile à tourner, même quand je suis seul, l'histoire qui continue parce que je suis connecté par le lien des étoiles. Le cœur des gens qui changent constamment est compliqué et mystérieux, mais est-ce que vous le dites vraiment? Vous êtes déjà épanoui et vous vous promenez, et la ville de nuit Kimi commence à danser. Temps, temps, temps, temps, temps, heure, heure, heure, heure, heure, heure, heure, heure, heure, heure, heure Temps! Les temps pour saupoudrer brillamment les pétales Ce soir est Yuzuki Hana Hoi! Iyohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh Si vous poursuivez Chiaki, à l'ère de l'est de l'ouest, le cœur des gens qui changent constamment est compliqué, mais est-ce que vous le dites vraiment même si c'est une chose mystérieuse? Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois Re fois La danse qui disperse brillamment les pétales, le banquet, le banquet, le banquet, le banquet, le banquet, le banquet, le banquet, le banquet Quel jour est-il ce soir? Mercredi, jeudi, vendredi, samedi, dimanche, lundi et mardi? Ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha ha Je vais le faire. Si je l'ai mis en plus de mots, j'ai pensé que je devrais effacer les mots si c'est une relation qui disparaît. J'avais peur, mais ça? C'est dur comme une pierre du côté de l'épée, et si c'est duveteux avec une telle volonté, est-ce Yamato Nadeshiko? Non, j'ai envie de mourir sans ""! Duveteux duveteux Vous appelez votre nom Fluffy duveteux Vous riez Juste parce que vous riez Dieu qui vous fait sourire Merci Koisuru Kisetsuha Yokubari duveteux duveteux Vous êtes heureux de rencontrer même avec le mal du destin Il suffit d'appeler le nom, ça flotte dans l'air, c'est duveteux, tu rigoles, ça te fait sourire, merci mon Dieu, je suis heureux de t'avoir rencontré même avec un méfait du destin. C'est vrai. Dodin Don Dodo?! Doha

Recommended Posts

Je veux utiliser PyTorch pour générer quelque chose comme les paroles de Japari Park
Je souhaite utiliser uniquement le traitement de normalisation SudachiPy
Je veux exprimer mes sentiments avec les paroles de Mr. Children
Je veux prédire le succès des joueurs NBA utilisant le SDK Qore
Je souhaite personnaliser l'apparence de zabbix
Je souhaite utiliser la fonction d'activation Mish
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
Je souhaite utiliser Python dans l'environnement de pyenv + pipenv sous Windows 10
Je veux grep le résultat de l'exécution de strace
Je veux bien comprendre les bases de Bokeh
Je veux utiliser le jeu de données R avec python
Je souhaite augmenter la sécurité de la connexion SSH
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
Je souhaite également utiliser les commandes Linux à l'invite de commande! Utilisez les commandes Linux à l'invite de commande au lieu de Git Bash
Je veux utiliser la dernière version de gcc même si je n'ai pas les privilèges sudo! !!
Je veux faire quelque chose comme sort uniq en Python
Je veux obtenir des informations sur le fonctionnement de Yahoo Route
[Python] Je souhaite utiliser l'option -h avec argparse
Je veux déterminer l'authenticité d'un élément du tableau numpy
Je veux connaître la nature de Python et pip
[Introduction à Pytorch] Je souhaite générer des phrases dans des articles de presse
Keras Je veux obtenir la sortie de n'importe quelle couche !!
Je veux connaître la légende du monde des technologies informatiques
Je veux obtenir le nom de la fonction / méthode en cours d'exécution
Je souhaite utiliser la traduction de raccourcis comme l'application DeepL même sous Linux
Je veux lire la version html de la version "OpenCV-Python Tutorials" OpenCV 3.1
Je veux sortir le début du mois prochain avec Python
Comparaison des services informatiques GCP [Je souhaite l'utiliser sans serveur]
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Je veux vérifier la position de mon visage avec OpenCV!
Je veux connaître la population de chaque pays du monde.
Je ne veux pas l'admettre ... Représentation dynamique du système de Neural Network
[Langage C] Je souhaite générer des nombres aléatoires dans la plage spécifiée
Je veux utiliser jar de python
Je veux utiliser Linux sur mac
Je veux faire revivre la légendaire combinaison Nintendo en utilisant pleinement l'IA et la technologie RH!
Je veux convertir par lots le résultat de "chaîne de caractères" .split () en Python
Je veux expliquer en détail la classe abstraite (ABCmeta) de Python
Je souhaite trier une liste dans l'ordre des autres listes
Je souhaite utiliser Django Debug Toolbar dans les applications Ajax
Je veux utiliser quatre règles compliquées dans l'instruction IF du modèle Django! → Utilisez un modèle personnalisé
Je souhaite utiliser la console IPython Qt
Je veux afficher la barre de progression
Je veux analyser les sentiments des gens qui veulent se rencontrer et trembler
Bases de PyTorch (1) -Comment utiliser Tensor-
Je souhaite laisser une commande arbitraire dans l'historique des commandes de Shell
Je souhaite arrêter la suppression automatique de la zone tmp dans RHEL7
Pour le moment en utilisant FastAPI, je veux montrer comment utiliser l'API comme ça dans swagger
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Je veux gérer la rime part2
Je veux gérer la rime part5
Je veux gérer la rime part4
Je veux obtenir le chemin du répertoire où le fichier en cours d'exécution est stocké.
Je souhaite visualiser l'état des transferts de la J League 2020, que dois-je faire?
Je souhaite définir un cycle de vie dans la définition de tâche d'ECS
Je veux ajouter du silence pendant 1 seconde au début d'un fichier wav
Je souhaite voir une liste de fichiers WebDAV dans le module Requêtes
Je veux recadrer l'image le long du contour au lieu du rectangle [python OpenCV]
Je souhaite stocker les résultats de% time, %% time, etc. dans un objet (variable)