Neulich wurde die Entwicklung der Deep-Learning-Bibliothek "Chainer" von Preferred Networks (PFN) abgeschlossen. In meinem Labor sind wir in Tensorflow-Gruppe und Chainer-Gruppe unterteilt und haben miteinander um Reittiere konkurriert, aber die Chainer-Gruppe wurde am Ende der Entwicklung eliminiert (sie scheint scharf zu sein).
Es tut mir sehr leid, dass ich Chainer gewohnheitsmäßig verwendet habe, und gleichzeitig bin ich sehr dankbar, dass ich ein benutzerfreundliches Framework (Gläubige) bereitgestellt habe.
Nun, diese PFN-Firma scheint sich der Entwicklung von PyTorch zuzuwenden. Außerdem höre ich, dass PyTorch selbst viele Aspekte hat, die der Beschreibung von Chainer ähneln. Außerdem habe ich bei meinen Recherchen hauptsächlich CNN und GAN verwendet, aber RNN nicht angesprochen. .. .. ..
** "Dies ist eine gute Gelegenheit zu lernen, wie man PyTroch benutzt und wie RNN funktioniert ???" **
Also habe ich das Buch "Deep Learning from Zero ②" aus demselben Labor ausgeliehen und den Inhalt von RNN ausgeliehen. Ich habe es so gelesen wie es war und es mit PyTorch implementiert. Dieser Artikel ist ein Memorandum.
Um ehrlich zu sein, ** "Ich verstehe RNN nicht" ** ** "Ich weiß nicht, wie man PyTorch benutzt" ** ** "Lehrer von weisen Leuten" ** Ich habe einen Artikel gemacht, weil es sich anfühlt.
Der Quellcode wird auf Github veröffentlicht. ~~ Übrigens habe ich "Kemono Friends" noch nie gesehen. ~~ Ich habe nur eine Folge gesehen.
RNN ist eine Abkürzung für Recurrent Neural Network, ein neuronales Netzwerk, das hauptsächlich für Zeitreihendaten verwendet wird. Im Gegensatz zu normalen neuronalen Netzwerkschichten haben RNN-Schichten einen Schleifenpfad, der ihre Ausgabe als Eingabe verwendet. Dies hat die Funktion, dass versteckte Informationen für jede Zeitreihe beibehalten werden können. LSTM ist eine Ableitung von RNN, die der Schleifenstruktur das Konzept des Gates hinzufügt.
Eine ausführliche Erklärung finden Sie unter hier oder hier anstelle meiner Erklärung. Es ist viel einfacher zu verstehen.
Es wird gesagt, dass die Datenliste, die so geschrieben wurde, dass sie die Wortinformationen in den Textdaten nicht abdeckt, als "Korpus" bezeichnet wird. Es scheint, dass den Wörtern in diesem Korpus IDs zugewiesen sind, um die Handhabung als ID-Liste zu vereinfachen. Diesmal war es jedoch mühsam, die Wörter zu trennen (benutze ~~ MeCab ~~), also habe ich jedem Zeichen, das in den Texten erscheint, eine ID zugewiesen und '^' hinzugefügt, um den Anfang und das Ende der Texte anzugeben. Ich fügte hinzu'_'.
Unten finden Sie die ID-Liste und die entsprechenden Wörter.
{'^': 0, 'W': 1, 'e': 2, 'l': 3, 'c': 4, 'o': 5, 'm': 6, ' ': 7, 't': 8, 'Yo': 9, 'U.': 10, 'Dies': 11, 'Damit': 12, 'Das': 13, 'Turbolader': 14, 'Pa': 15, 'Li': 16, '- -': 17, 'Ku': 18, '!': 19, 'jetzt': 20, 'Tag': 21, 'Ebenfalls': 22, 'Machen': 23, 'Tsu': 24, 'Ta': 25, 'Nieder': 26, 'Ba': 27, 'Groß': 28, 'Laut': 29, 'Gi': 30, 'Aber': 31, 'Mm': 32, 'Hoch': 33, 'Et al.': 34, 'Oder': 35, 'Zu': 36, 'Lol': 37, 'ich': 38, 'e': 39, 'Wenn': 40, 'Fu': 41, 'Les': 42, 'Zu': 43, 'Hektik': 44, '嘩': 45, 'Shi': 46, 'Hand': 47, 'Su': 48, 'Tsu': 49, 'Chi': 50, 'Ja': 51, 'Mich': 52, 'Naka': 53, 'Gut': 54, 'Ke': 55, 'von': 56, 'Ist': 57, 'Bleibe': 58, 'Nana': 59, 'Buch': 60, 'Dies': 61, 'Liebe': 62, 'Ah': 63, 'Ru': 64, 'Ho': 65, 'Du': 66, 'Hand': 67, 'Zu': 68, 'Einer': 69, 'damit': 70, 'Öffnung': 71, 'Robust': 72, '(': 73, 'Beeindruckend': 74, '・': 75, 'Tsu': 76, 'Su': 77, ')': 78, 'Aussehen': 79, 'Ta': 80, 'Zehn': 81, 'Mann': 82, 'Farbe': 83, 'Ist': 84, 'Faszination': 85, 'Re': 86, 'Gehen': 87, 'Abend': 88, 'Leben': 89, 'Himmel': 90, 'Finger': 91, 'Wann': 92, 'Schwer': 93, 'Hallo': 94, 'Ji': 95, 'Gut': 96, 'Wissen': 97, 'Ri': 98, 'Shake': 99, 'Mukai': 100, '\u3000': 101, 'Zu': 102, 'La': 103, 'Bu': 104, 'Le': 105, 'Hmm': 106, 'Pu': 107, 'Auge': 108, 'Sie sehen': 109, 'Nur': 110, 'Selbst': 111, 'Yu': 112, 'Roh': 113, 'Ki': 114, 'Dekoration': 115, 'Ku': 116, 'Länge': 117, 'Mann': 118, 'Machen': 119, 'Es tut mir Leid': 120, '♡': 121, 'N': 122, 'i': 123, 'y': 124, 'u': 125, 'Ro': 126, 'Yu': 127, 'Gesicht': 128, 'Warten': 129, 'Öffnen': 130, 'Tür': 131, 'Ge': 132, 'Traum': 133, 'Pa': 134, 'Wort': 135, 'Fortsetzung': 136, 'Gu': 137, 'ich': 138, 'D.': 139, 'ich': 140, 'Bedienung': 141, 'Ki': 142, 'Stur': 143, 'Zhang': 144, 'EIN': 145, 'Sa': 146, 'Oh': 147, 'einstellen': 148, 'Linie': 149, 'Beeindruckend': 150, 'Oben': 151, 'einer': 152, 'Suspendiert': 153, 'Leben': 154, 'B.': 155, 'Ze': 156, 'Eh': 157, '、': 158, 'Wende': 159, '?': 160, 'O': 161, 'h': 162, 'Osten': 163, 'Was': 164, 'Gebell': 165, 'Westen': 166, 'Welt': 167, 'Welt': 168, 'Während ~': 169, 'Klang': 170, 'EIN': 171, 'Mich': 172, 'De': 173, 'ich': 174, ',': 175, 'Sammlung': 176, 'Freund': 177, 'Tatsu': 178, 'Grundstufe': 179, 'Feind': 180, 'Reise': 181, 'Stehen': 182, '_': 183}
Irgendwie ist der Speicherplatz in voller Breite als '\ u3000' registriert, aber ich werde ihn vorerst ignorieren.
Dies ist der Quellcode der von PyTorch implementierten Netzwerkklasse.
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
Auf diese Weise ist der Schreibstil wie bei Chainer. Ein wenig.
Wenn mein Verständnis korrekt ist, scheint die Einbettungsschicht eine Operation zum Extrahieren der Gewichtungsparameterzeile zu sein, die der ID entspricht. Daher ist es nicht erforderlich, die ID in einen One-Hot-Ausdruck zu konvertieren und bei der Eingabe in die vollständig verbundene Schicht eine Gewichtsmultiplikation durchzuführen, sodass der Rechenaufwand erheblich reduziert wird. .. ..
Die Einbettungsebene in PyTorch ist
import torth.nn as nn
nn.Embedding(Gesamtzahl der IDs, Anzahl der Gewichtsabmessungen beim Herausnehmen)
Es kann mit implementiert werden. (vielleicht)
Laut hier ist der Eingangstensor in PyTorchs LSTM dreidimensional.
Es scheint "(Länge der Eingabezeitreihen, Stapelgröße, Vektorgröße)" zu sein.
Durch Setzen von batch_first = True
beim Erstellen einer Instanz hier
Es wird "(Stapelgröße, Länge der einzugebenden Zeitreihen, Vektorgröße)".
Dann werden als Rückgabewert alle Ausgabewerte zurückgegeben, die aus der Länge der Eingabezeitreihe und dem Tupel des Ausgabewerts bezogen auf das letzte Mal erhalten wurden.
Ich kann es nicht gut in Worten sagen, aber es sieht aus wie in der Abbildung unten.
Daher sind "all_time_hidden [:, -1 ,:]" und "hidden_cell" im Programm praktisch identisch.
Truncated BPTT Bei der RNN-Fehlerrückausbreitung wird die Rückausbreitung wie bei einem normalen neuronalen Netzwerk durchgeführt, indem dem Berechnungsdiagramm gefolgt wird, wenn es in horizontaler Richtung auf der Zeitachse erweitert wird.
Dies wird als Back Propagation Through Time (BPTT) bezeichnet. (Abbildung unten)
Aber hier gibt es ein Problem. Das heißt, die Ebene wird proportional zur Länge der Zeitreihe tiefer. Im Allgemeinen verschwindet beim tiefen Lernen der Gradient umso mehr, je tiefer die Schicht ist, und der Gradient explodiert, und auch die Rechenressourcen nehmen zu.
Wenn Sie mit langen Zeitreihendaten arbeiten, kürzen Sie daher die Backpropagation-Verbindung auf eine geeignete Länge (kürzen). Die Idee ist abgeschnittenes BPTT. (Abbildung unten) Hierbei ist zu beachten, dass die Vorwärtsausbreitungsverbindung erhalten bleibt. Das heißt, wenn die Verbindung zwischen dem Zeitpunkt t und t + 1 unterbrochen wird, wird die Ausgabe ausgegeben, die zum Zeitpunkt t während der Vorwärtsausbreitung erhalten wird. Muss zum Zeitpunkt t + 1 als Eingabewert beibehalten werden.
Der Quellcode entspricht den folgenden Teilen.
def repackage_hidden(self, hidden_cell):
self.hidden_cell = (hidden_cell[0].detach(), hidden_cell[1].detach())
Der erhaltene Ausgabewert wird als neuer Tensor neu erstellt, und der Berechnungsgraph wird vorübergehend abgeschnitten, wenn diese Funktion aufgerufen wird.
.detatch ()
entspricht der Rolle, nur auf den Wert wie .data
in Chainer (wahrscheinlich) zu verweisen.
Da LSTM zwei Ausgänge hat, versteckt und Zelle, wird es mit einem Taple mit jeweils als Element erstellt.
Vorerst werde ich den Quellcodeteil veröffentlichen, der der Lernteil sein wird.
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 #Geben Sie die Länge der Zeichen an, die durch Rückübertragung geschnitten werden sollen
batch_size = 32
while True:
seq_len = 256 #Länge zum Ausschneiden durch Lernen
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()
Ich möchte lernen, das nächste Zeichen aus der Eingabe einer Zeichenfolge beliebiger Länge vorherzusagen. Dieses Mal werde ich eine geeignete Position aus den Textdaten festlegen, 256 Zeichen daraus extrahieren und eine abgeschnittene BPTT mit einer Länge von 16 durchführen.
Die Weiterleitung wird beibehalten, bis "model.init_hidden_cell ()" im Quellcode aufgerufen wird. Die Rückausbreitung erfolgt nacheinander innerhalb eines Blocks der Länge 16.
Der Weg, um Verlust zu nehmen, besteht darin, dass die Ausgabe für die letzte Eingabe das nächste Zeichen ist (One-Hot-Darstellung der ID in). Die Softmax-Kreuzentropie wird so genommen, dass sie wird.
Übrigens macht es keinen Sinn, dass Loss_function eine Klasse ist (Entschuldigung).
Der Quellcode zum Generieren der Texte sieht vorerst so aus.
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]) #Stichproben
#next_index = int(out.argmax()) #Maximale Wahrscheinlichkeit der Stichprobe
print(convert.id2char[next_index], end="")
if((c+2)%100==0):
print("")
gen_sentence = [next_index]
Geben Sie dem trainierten "model ()" zunächst die ID einer geeigneten Zeichenliste. Geben Sie die Ausgabe ein, die das nächste Zeichen aus diesem einen Zeichen vorhergesagt hat, und sagen Sie das nächste Zeichen voraus. .. .. Die Texte werden durch 700-maliges Wiederholen der obigen Texte erzeugt. Zu diesem Zeitpunkt kann die Ausgabe von "model ()" als Wahrscheinlichkeit für jede ID ausgedrückt werden, sodass die ID mit der höchsten Wahrscheinlichkeit als nächstes Zeichen verwendet werden kann, aber ich dachte, es würde mehr Spaß machen, Zufälligkeit zu haben, also aus der Wahrscheinlichkeitsverteilung Die Zeichen-ID wird in Form einer Abtastung ermittelt.
Lass uns so viel runter gehen, wie wir fühlen. Das ist ein unangenehmes Gefühl.
Unten sind die generierten Texte
Yuu te Nishi Yuu? I Buri h herumlaufen! Einer der Finger ist t oder dies ist keine Fortsetzung o Es gibt keine Wartezeiten über zehn Tedenrima ♡ Nikala Large Size Epetite y Takaashi Royaeru Sora Futer Ehemann e Ya Para h ist da! Ritsu ♡ Tomo Kimi lol La e ぉ Kujii Guru Tag! Het Li t I Standing Utsubakoru Puyatsu h I Utta Supate Line W Oc me Nora de c Soka Heldenhand Yes et Ra Sprechender Freund I (Kekun Blasphemie eo Tag 1 c tekoyaen west ipu so te te te te te te te te te te te te te t Tatsukamu Koro o Pa h Yuken La La La La, Papu h no Pusa! Ta t Higashi Chii u Sosashi no Ryo Warten auf W Hartnäckig I) Heri lebt, um gut zu sein Ich bin Yohasu! E Makakari) ・ Wow, ich habe meine Hände satt und meine Finger sind in meinen Händen. Ba-kun ist derjenige, der ich bin! Chika (Teda no Miru Ba o Chi W Dekoration t Hibiki to ni e Viel Glück, Student und Kind! Laig! Es ist zehn Jahre alt, aber es ist eine Lara, und es ist eine Linie, es ist ein Auge. Es tut mir leid, es tut mir leid, es tut mir leid, es tut mir leid, es tut mir leid, es tut mir leid, es tut mir leid, es tut mir leid To-Kun Ro-Ta-Ra-Kun zu Guive (Nen! Ja, auch wenn Sie ein Gesicht haben
Eh, du bist auch ein Feind und du bist fasziniert von der Tür (Tor) Moto) Du kannst sie auch dekorieren und du kannst lachen. Weil es 10 Personen und 10 Farben sind, wenn Sie sanft Ihre Finger auf den Dämmerungshimmel legen, der von einander fasziniert ist, schön, Sie kennenzulernen! Ich möchte mehr wissen! Willkommen im Japali Park! Hey, jeder kann frei zum Leben erweckt werden. Du bist auch eine Dekoration. Es ist ein unzusammenhängendes Stück. Monishi, ich bin ein Serval von Dobarcat! Ich werde mein Bestes geben! Ich werde es Arai-san überlassen! Jeder wird gehen. Nun, ich bin schon steil (Schön, Sie kennenzulernen, wenn ich mich versammle, ich möchte mehr über Sie erfahren! Gao! Fahren Sie hier fort, willkommen im Japari Park! Vielen Dank von heute, seien Sie immer nett zu mir Lächeln Die offene Tür (Tor), die auf dich gewartet hat Wenn du viele Träume redest, wird es für immer weitergehen Große Reise Komukai! Haji Selbstfinger Soja bellt Wooney Hier ist der Japari Park Wann ist es? Lalala Gather und Lupar! Ab heute freue ich mich auf dich, aber immer ein sanftes Lächeln. Die offene Tür, die auf dich wartete (Wenn du viel über Gate Yumeko sprichst) Mach hier e So de großes Abenteuer (Ich bin Chinrama-Kun, ich bin Serval, Arai, wer ist in der Dämmerung?
Wow! Mitoroki Masu Geh zum Rock, wie ist es echt? Oh, heul, heul in den Japari Park! Lalalala Color lc Willkommen im Japari Park -! Es ist gut, sich umzudrehen - ich werde mein Bestes geben - ich überlasse es Arai-san! Jeder wird gehen Ich werde mein Bestes geben, wenn ich nicht höher ziele, werde ich rocken, ist es echt? Oh Higashi Heulen im Westen Heulen im Westen Resonanz auf der ganzen Welt Safari-Melodie Willkommen im Japari Park Willkommen im Japari Park Willkommen im Japari Park Schön, Sie ab heute zu treffen Immer ein sanftes Lächeln Die offene Tür (Tor), die immer auf Sie wartete Hier und da, Soko Niso Japari Park! Auch heute wurde Dottan Battans Aufregung angehäuft und das Tor von Ihnen geöffnet.) La Howling im Westen Resonanz auf der ganzen Welt Safari-Melodie Willkommen im Welcome Japari Park! Willkommen im Welcome Japari Park! Ab heute Schön dich kennenzulernen, immer ein sanftes Lächeln Die offene Tür (Tor), die auf dich wartete Wenn du viele Träume redest, wird es für immer weitergehen Große Reise Dies ist Japari Park Ich bin ein Serval einer Servalkatze! Ich werde mein Bestes geben, ich werde es Arai-san überlassen! Jeder wird gehen, ich werde mein Bestes geben, wenn ich nicht höher ziele, ich werde rocken, ist es echt? Oh, heul nach Osten, heul nach Westen Resonanz auf der ganzen Welt Safari Melody Willkommen im Japari Park!
Wenn Sie sich umdrehen, werden Sie hier und da Probleme haben. Es ist ein Durcheinander. Es ist ein Durcheinander. Es ist eine große Sache. Jeder scheint frei zu leben. Sie müssen es nicht dekorieren. Schön, sich zu treffen. you Japari Park! Schön, Sie von heute an zu treffen. Immer ein sanftes Lächeln. Die offene Tür (Tor), die immer auf Sie wartete. Große Reise, die für immer andauern wird, wenn Sie viele Träume sprechen. Dies ist Japari Park. Ich bin ein Serval einer Servalkatze Ich werde mein Bestes geben, ich werde es Arai-san überlassen! Jeder wird gehen, ich werde mein Bestes geben, wenn ich nicht höher ziele, ich werde rocken, wie, heulen im Osten, im Westen Heulen, Echo auf der ganzen Welt Safari-Melodie Willkommen bei Willkommen im Japari Park! Noch heute besteht Dottanbattans Aufregung aus zehn Personen und zehn Farben. Wenn Sie also Ihre Finger sanft auf den faszinierenden Dämmerungshimmel legen, möchte ich mehr über Sie erfahren! Wenn Sie sich umdrehen, werden Sie hier und da Probleme haben. Es ist ein Durcheinander, es ist ein Durcheinander, es ist ein Durcheinander, es ist eine große Sache, jeder lebt frei. Sie müssen es auch nicht dekorieren. Japari Park! Schön, Sie von heute an zu treffen. Immer ein sanftes Lächeln. Die offene Tür (Tor), die auf Sie wartete. Wenn Sie viele Träume sprechen, wird es für immer weitergehen. Große Reise Dies ist Japari Park Ich bin ein Serval einer Servalkatze! Ich werde mein Bestes geben! Ich werde es Arai-san überlassen! Jeder wird gehen. Ich werde mein Bestes geben, wenn ich nicht höher ziele.
Wow, Überlernen, Spaß (wahres Gesicht)
Diesmal habe ich zum ersten Mal einen Artikel veröffentlicht, daher gab es viele Teile, die schlecht oder schwer zu verstehen waren. Ich habe jedoch nicht die Motivation, es neu zu schreiben, also poste es so wie es ist. Ich werde von Freiwilligen durcheinander gebracht.
Wir freuen uns auf Ihre Ratschläge und Vorschläge für Fehler.
kibounoasa
Dies ist das Ergebnis der automatischen Generierung der Texte verschiedener Songs in einem Datensatz. Was für ein Lied ist drin?
Weil es so faszinierend ist, wenn Sie Ihre Finger sanft auf den Dämmerungshimmel legen, möchte ich Sie besser kennenlernen! Gao! Wenn Sie sich umdrehen, werden Sie hier und da Probleme haben. Es ist ein Chaos. Es scheint, dass jeder frei lebt. Sie müssen es auch nicht dekorieren. Schön, Sie kennenzulernen. Japari Park! Lalalala Oh, Willkommen im Japali Park! Lalalala Lalala Lala Willkommen im Japali Park! Es scheint, dass jeder frei lebt. Sie müssen es auch nicht dekorieren. Schön, Sie kennenzulernen. Japari Park! Schön, Sie von heute an zu treffen. Immer ein sanftes Lächeln. Eröffnung, die immer auf Sie wartete Gate: Wenn du viel über deine Träume sprichst, wird es für immer weitergehen. Große Reise Oh Heul nach Osten Heul nach Westen Nachhall auf der ganzen Welt Willkommen im Japari Park! Willkommen im Japari Park! Willkommen im Japari Park! Der heutige Dottan, Fuss! Gao! Takaba Enki ist hi y? Gorogoro Däne Waku Waku Uzuru Slapstick Noronoro Ah? Urouro Ateku Teku Kosokoso Rauheit Sunsun Oh? Peropero Ups Mogumogu Kirakira Guine Pika Pika Picone Mofumofu Nadade Niko! Flauschig, flauschig, flauschig, du rufst deinen Namen, flauschig, flauschig, du lachst, Gott, der dich zum Lächeln bringt, danke, ich bin froh, dass ich dich sogar mit einem Schicksal getroffen habe Du siehst, mein Herz entwickelt sich immer mehr, das ist nicht richtig, ich schaue mich immer noch an, ich weiß, dass meine Existenz in dir nicht so groß ist wie du in mir, aber jetzt In diesem Moment, wenn Sie das Gefühl haben, dass Sie teilen, Yamato Nadeshiko! Kurz gesagt? Staub und Nadoko Yamato! Wenn du zu dir aufschaust, ist es zu hell und zu hell. Ich denke an dich. Gott, der nur deswegen schmilzt. Danke. Zu sehen, dass ich dich sogar mit dem Unheil des Schicksals getroffen habe. Pupper Paddon Ups Tan Don Dodo? Dodin Don Dodo ?! Dopapa Donnu! Tu es nicht nicht? Dodin Don Dodo ?! Dopad Don Doun Shakin Dentans Gorogorotan Dojan! Aha, ein Licht (Ja) scheint, wählt ein Wort und selbst wenn es schwierig ist, sich zu drehen, selbst wenn ich einsam bin, geht die Geschichte weiter, weil ich durch das Band der Sterne verbunden bin. Wenn ich auf die Chance warte, an Gott zu sterben, wenn ich Chiaki einen Tag nachjage, die Ära von Touensai Die Herzen von Menschen, die sich ständig verändern, sind kompliziert und mysteriös, aber sagen Sie das wirklich? Sie müssen nach einer ausgewachsenen Wunde rufen, und die Nachtstadt Kimi beginnt mit einem Signal zu tanzen. Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten Zeiten! Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten, Zeiten Heute Abend ist Yuzuki Hana Hoi! Wenn Sie Chiaki in der Ära des Ost-West-Laufens nachjagen, sind die Herzen der Menschen, die sich ständig verändern, kompliziert, aber sagen Sie das wirklich, auch wenn es eine mysteriöse Sache ist? Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Re Zeiten Der Tanz, den das Fest vorgestern, gestern, heute, morgen und übermorgen mit gestörten Haaren fortsetzt. Welcher Tag ist heute Abend? Mittwoch, Donnerstag, Freitag, Samstag, Sonntag, Montag und Dienstag? Ha ha ha ha ha ha ha ha ha ha ha ha ha ha! Ich werde es tun. Wenn ich es in mehr Worte fasse, dachte ich, ich sollte die Worte löschen, wenn es eine Beziehung ist, die verschwindet. Ich hatte Angst, aber das? Etwas ist anders, es ist hart wie ein Stein von der Spitze des Schwertes. Nein, ich möchte ohne "" sterben! Fluffy fluffy Du rufst deinen Namen Fluffy fluffy Du lachst Nur weil du lachst Gott, der dich zum Lächeln bringt Danke Koisurukisetsuha Yokubari fluffy fluffy Du bist glücklich Rufen Sie einfach den Namen, es schwebt in der Luft, es ist flauschig, Sie lachen, es bringt Sie zum Lächeln, Gott sei Dank, ich bin froh, dass ich Sie sogar mit einem Unheil des Schicksals getroffen habe. Korrekt. Dodin Don Dodo ?! Doha