Suchwörter   (werden UND-verknüpft)
Keines der folgenden   keine eigenen Beiträge
Name des Autors 
resp. Themenstellers 

nur dessen Startbeiträge
auch in Antworten dazu
Forum 
 Suchrichtung  Auf  Ab Suchmethode  Sendezeit Empfehlungbeta [?]
       Die Suche erfolgt nach den angegebenen Worten oder Wortteilen.   [Suchtipps]

Link auf dieses Suchergebnis hier

Forum
Thema Eingetragen
Autor

Mathematik
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Anwendung Takagi-Sugeno-Regler  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-06-03
lissy1234567
 

Hey,

meine Frage ist kurz: Kann jemand ein konkretes Beispiel nennen, wo man einen Takagi-Sugeno-Regler anwendet und wie zu diesem Beispiel denn die Regeln aussehen würden?
Mir ist nicht ganz klar, wo man eine Regel nach Takagi-Sugeno wirklich gegeben hat, vielleicht ja in der Physik.

Danke :)

Theoretische Informatik
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Unterschied Fuzzy Neural Network und Adaptive Neural Fuzzy Inferencesystem  
Beitrag No.1 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-14
lissy1234567
 

Hallo?

Theoretische Informatik
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Unterschied Fuzzy Neural Network und Adaptive Neural Fuzzy Inferencesystem  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-13
lissy1234567
 

Hallo Leute,

mir ist der Unterschied zwischen den zwei oben genannten Begriffen nicht wirklich klar.
Ich schreibe mal ganz kurz, wie ich es verstanden habe und hoffe, ihr könnt mir weiterhelfen.
1. Fuzzy Neural Network (hybrid): Man führt ja sozusagen die Fuzzy Logik und die NNs zusammen. Hat man ein Datensatz gegeben, dann fällt es oft gerade ohne Expertenwissen sehr schwer daraus Regeln oder Membership-Funktionen anzuwenden. Dank der Zusammenführung der Fuzzy Logik und NN muss man das aber auch gar nicht tun, denn das NN hilft dabei, die Regeln und die optimalen Parameter für die Membership-Funktionen selbstständig zu finden.
2. Adaptive Neural Fuzzy Inference-Systeme: Auch hier hilft das NN dabei, optimale Parameter in diesem Fall für das Inferenz-System zu finden. Fragen hierzu: Was heißt genau adaptiv? Was sind diese Parameter bei einem FIS?

Danke :)

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
“only integer scalar arrays can be converted to a scalar index” erscheint  
Beitrag No.5 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-11
lissy1234567
J

tatsächlich - wenn ich zB 0 eingebe wie du sagst, dann erhalte ich ein Ergebnis, das allerdings totaler Schwachsinn ist:D

Cool, jetzt weiß ich auch was eine Stacktrace ist, vielen Dank :)

Ich muss das glaube ich nochmal alles durchdenken und würde mich ggf nochmals hier melden...könnte etwas dauern :)

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
“only integer scalar arrays can be converted to a scalar index” erscheint  
Beitrag No.3 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-11
lissy1234567
J

Hi, danke für deine Antwort!
Wenn man sich mal den Code in github.com/twmeggs/anfis anguckt, dann ist glaube ich inzwischen X und Y egal (aber beides sind arrays). Soweit ich es verstanden habe, muss ich mf als InputVar nehmen (siehe anfis.py auf github)...wobei mf halt aus Wörtern besteht.
Ich blicke echt nicht durch und ich weiß auch nicht was eine ganze Trace ist?

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
“only integer scalar arrays can be converted to a scalar index” erscheint  
Beitrag No.1 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-11
lissy1234567
J

Hilfe!

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
“only integer scalar arrays can be converted to a scalar index” erscheint  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-09
lissy1234567
J

Hallo,

ich versuche gerade in Python 2 mit dem Package anfis zu spielen (Code zu finden unter Dabei habe ich das allseits bekannte load_iris()-Dataset aus sklearn geladen. Es hat auch alles geklappt, allerdings erhalte ich beim Versuch, "anfis.plotMF()" anzuwenden, ständig den oben stehenden Fehler: only integer scalar arrays can be converted to a scalar index
Hier mein Code:
python
import anfis
from anfis.membership import membershipfunction, mfDerivs
import numpy
from sklearn.datasets import load_iris
 
data = load_iris()
X = data['data']
Y = data['target']
#training_data = numpy.loadtxt("training.txt", usecols=[1,2,3])
#X = training_data [:,0:2]
#Y = training_data [:,2]
# Defining the Membership Functions
mf = [[['gaussmf',{'mean':0.,'sigma':1.}],['gaussmf',{'mean':-1.,'sigma':2.}],['gaussmf',{'mean':-4.,'sigma':10.}],['gaussmf',{'mean':-7.,'sigma':7.}]], 
      [['gaussmf',{'mean':1.,'sigma':2.}],['gaussmf',{'mean':2.,'sigma':3.}],['gaussmf',{'mean':-2.,'sigma':10.}],['gaussmf',{'mean':-10.5,'sigma':5.}]],
      [['gaussmf',{'mean':0.,'sigma':1.}],['gaussmf',{'mean':-1.,'sigma':2.}],['gaussmf',{'mean':-4.,'sigma':10.}],['gaussmf',{'mean':-7.,'sigma':7.}]], 
      [['gaussmf',{'mean':1.,'sigma':2.}],['gaussmf',{'mean':2.,'sigma':3.}],['gaussmf',{'mean':-2.,'sigma':10.}],['gaussmf',{'mean':-10.5,'sigma':5.}]]]
# Updating the model with Membership Functions
mfc = membershipfunction.MemFuncs(mf)
 
# Creating the ANFIS Model Object
from anfis import anfis
anf = anfis.ANFIS(X, Y, mfc)
# Fitting the ANFIS Model
anf.trainHybridJangOffLine(epochs=10)
 
anf.plotMF(mf, X)
Ich weiß echt nicht, was ich da als Argumente verwenden soll, da ich den Code von anfis nicht ganz durchblicke. Ich bin kein Informatiker und relativ neu in dem fuzzy neuro Genre :(

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Probleme beim Import des Python-Packs ANFIS  
Beitrag No.3 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-09
lissy1234567
J

Inzwischen habe ich die Lösung gefunden. Das Paket anfis läuft nur unter Python 2, also habe ich im Anaconda Navigator einfach eine neue Umgebung mit Python 2.7 erstellt und anschließend anfis geladen, hat super geklappt! Wie man eine neue Umgebung mit einem anderen Python (dh Switchen zwischen Python 2 und 3) erstellt, habe ich hier gefunden:https://towardsdatascience.com/environment-management-with-conda-python-2-3-b9961a8a5097
Hat für mich 1 zu 1 so funktioniert unter Windows :)

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Probleme beim Import des Python-Packs ANFIS  
Beitrag No.2 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-09
lissy1234567
J

ja habe ich

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Probleme beim Import des Python-Packs ANFIS  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-08
lissy1234567
J

Hallo,

ich beschäftige mich gerade eher noch theoretisch mit dem ANFIS-Modell. Für meine Master-Thesis soll ich alles in Python programmieren, weshalb ich nun auf das Package anfis gestoßen bin, zu finden unter
Ich arbeite normalerweise mit Anaconda und dem Jupyter Notebook und wie bei jedem anderen Package auch konnte ich anfis problemlos installieren.

Wenn ich es nun allerdings importieren möchte, so erscheint ein Fehler, den ich einfach nicht lösen kann.


Ich bin echt kein Programmier-Experte, und ich habe auch schon echt recherchiert, aber es hilft nichts...

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Neuronales Netz: Code nicht reproduzierbar  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-02
lissy1234567
J

Hallo Leute,

ich habe für das Poker-Hand-Dataset ein neuronales Netz mit ganz guten Ergebnissen angelegt. Ich dachte eigentlich - nachdem ich etwas recherchiert hatte und ein paar Zeilen zu Beginn eingefügt hatte - dass der Code reproduzierbar ist. Das ist aber nicht der Fall.

Hier der Code:
python
# Code reproduzierbar machen
from numpy.random import seed
seed(0)
from tensorflow import set_random_seed
set_random_seed(0)
 
# Importiere Datasets (Training und Test)
import pandas as pd
poker_train = pd.read_csv("C:/Users/elihe/Documents/Studium Master/WS 19 und 20/Softwareprojekt/poker-hand-training-true.data", header = None, names= ['Farbe K1', 'Rang K1', 'Farbe K2', 'Rang K2', 'Farbe K3', 'Rang K3', 'Farbe K4', 'Rang K4', 'Farbe K5', 'Rang K5', 'Poker-Hand'])
poker_test = pd.read_csv("C:/Users/elihe/Documents/Studium Master/WS 19 und 20/Softwareprojekt/poker-hand-testing.data", header = None, names= ['Farbe K1', 'Rang K1', 'Farbe K2', 'Rang K2', 'Farbe K3', 'Rang K3', 'Farbe K4', 'Rang K4', 'Farbe K5', 'Rang K5', 'Poker-Hand'])
# Poker-Hand hat Stufe 0-9: von nichts in der Hand über 1 Paar, Full House bis Royal Flush
 
# Umwandlung der Outputs
from sklearn.preprocessing import OneHotEncoder
 
# Trainings- und Testset in Input und Output verwandeln
X_tr = poker_train.iloc[:, 0:10].values
y_tr = poker_train.iloc[:, 10:11].values
 
X_te = poker_test.iloc[:, 0:10].values
y_te = poker_test.iloc[:, 10:11].values
 
# Output in 0-1-Vektoren verwandeln
encode = OneHotEncoder(categories = 'auto')
y_train = encode.fit_transform(y_tr).toarray()
y_test = encode.fit_transform(y_te).toarray()
 
# Skalierung
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
 
X_train = sc.fit_transform(X_tr)
X_test = sc.transform(X_te)
 
# NN mit Keras erstellen
import keras
from keras.models import Sequential
from keras.layers import Dense
 
# Schritt für Schritt Layer hinzufügen
nen = Sequential()
# Input Layer: 10 Features als Input
# 1. Hidden-Layer: 400 Units 
nen.add(Dense(400, input_dim = 10, activation = 'sigmoid'))
# 2. Hidden-Layer: 400 Units
nen.add(Dense(400, activation = 'sigmoid'))
# Output Layer: erhält 400 Inputs vom Hidden Layer und 10 Outputs (für jeden möglichen Ausgang)
nen.add(Dense(10, activation = 'softmax'))
 
# Wie sieht das Modell nun aus?
nen.summary()
 
# Kompilieren
from keras.optimizers import RMSprop
# Loss-Funktion und Optimizer wählen
# Loss gibt den Unterschied zwischen Vorhersage und wahrem Wert an, sollte sinken
# Optimizer ist Methode, gibt an, wie die Gewichte im NN verändert werden müssen, sodass die Loss-Funktion fällt
nen.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['accuracy'])
 
# batch_size = Anzahl an Samples pro Batch, Batch = teile Dataset auf
# epochs = ein ganzes(!) Dataset geht einmal durch das NN
# ca. 7.5 Minuten Laufzeit
nen_fit = nen.fit(X_train, y_train,epochs=30, batch_size=15, verbose=1, validation_split = 0.2, shuffle = False)

Zwar kommen fast die gleichen Ergebnisse raus, allerdings unterscheidet sich zum Beispiel der Loss um 0.1 oder so.
Wisst ihr wo die Fehlerquelle sein könnte?

Lissy

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Python: Confusion Matrix zeigt nicht alles an  
Beitrag No.3 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-01
lissy1234567
J

Ich habe den Fehler gefunden!
Dadurch, dass ich mein Test-Set anfangs gekürzt habe, um Rechenzeit zu sparen, waren nicht alle Kategorien vorhanden!

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Python: Confusion Matrix zeigt nicht alles an  
Beitrag No.2 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-01
lissy1234567
J

Ja, ich habe mit shuffle = False und = True ausprobiert. Ich glaube der Fehler liegt eher bei dem Teil mit dem OneHotEncoding, allerdings finde ichs einfach nicht

Programmieren
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Python: Confusion Matrix zeigt nicht alles an  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-05-01
lissy1234567
J

Hallo,

ich arbeite zur Zeit mit dem Poker-Hand Dataset und habe ein neuronales Netz darauf angewandt, alles lief super. Jetzt habe ich aber Probleme mit der Confusion Matrix.
Hier zunächst mein Code
python
# Code reproduzierbar machen
from numpy.random import seed
seed(0)
from tensorflow import set_random_seed
set_random_seed(0)
 
# Importiere Datasets (Training und Test)
import pandas as pd
poker_train = pd.read_csv("C:/Users/elihe/Documents/Studium Master/WS 19 und 20/Softwareprojekt/poker-hand-training-true.data", header = None, names= ['Farbe K1', 'Rang K1', 'Farbe K2', 'Rang K2', 'Farbe K3', 'Rang K3', 'Farbe K4', 'Rang K4', 'Farbe K5', 'Rang K5', 'Poker-Hand'])
poker_test = pd.read_csv("C:/Users/elihe/Documents/Studium Master/WS 19 und 20/Softwareprojekt/poker-hand-testing.data", header = None, names= ['Farbe K1', 'Rang K1', 'Farbe K2', 'Rang K2', 'Farbe K3', 'Rang K3', 'Farbe K4', 'Rang K4', 'Farbe K5', 'Rang K5', 'Poker-Hand'])
 
# Umwandlung der Outputs
from sklearn.preprocessing import OneHotEncoder
 
# Trainings- und Testset in Input und Output verwandeln
X_tr = poker_train.iloc[:, 0:10].values
y_tr = poker_train.iloc[:, 10:11].values
 
X_te = poker_test.iloc[:, 0:10].values
y_te = poker_test.iloc[:, 10:11].values
 
encode = OneHotEncoder()
y_tr = encode.fit_transform(y_tr).toarray()
y_te = encode.fit_transform(y_te).toarray()
 
# Skalierung
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
 
X_tr = sc.fit_transform(X_tr)
X_te = sc.transform(X_te)
 
# Kürzen der Datasets aufgrund der Rechenzeit
# train_test_split unnötig
X_train = X_tr[:5000]
y_train = y_tr[:5000]
X_test = X_te[:5000]
y_test = y_te[:5000]
 
# NN mit Keras erstellen
import keras
from keras.models import Sequential
from keras.layers import Dense
 
# Schritt für Schritt Layer hinzufügen
nen = Sequential()
# Input Layer: 10 Features als Input, 5 Units für den Hidden Layer
nen.add(Dense(512, input_dim = 10, activation = 'sigmoid'))
nen.add(Dense(512, activation = 'sigmoid'))
# Output Layer: eine Unit, erhält 5 Inputs vom Hidden Layer und 10 Outputs (für jeden möglichen Ausgang)
nen.add(Dense(10, activation = 'softmax'))
 
# Kompilieren
from keras.optimizers import RMSprop
# Loss-Funktion und Optimizer wählen
# Loss gibt den Unterschied zwischen Vorhersage und wahrem Wert an, sollte sinken
# Optimizer ist Methode, gibt an, wie die Gewichte im NN verändert werden müssen, sodass die Loss-Funktion fällt
nen.compile(loss='binary_crossentropy', optimizer=RMSprop(0.001), metrics=['accuracy'])
 
# batch_size = Anzahl an Samples pro Batch, Batch = teile Dataset auf
# epochs = ein ganzes(!) Dataset geht einmal durch das NN
nen_fit = nen.fit(X_train, y_train,epochs=30, batch_size=15, verbose=1, validation_split = 0.2, shuffle = False)
 
from sklearn.metrics import confusion_matrix
np.set_printoptions(suppress = True)
y_vorh = nen.predict(X_test)
y_vorh = np.argmax(y_vorh, axis =1)
 
y_test = np.argmax(y_test, axis = 1)
 
confmat = confusion_matrix(y_test ,y_vorh)
print(confmat)

Als Ergebnis würde ich eigentlich eine 10x10-Matrix erwarten, da ich ja mögliche Outputs von 0-9 habe.
Ich erhalte aber eine 8x8 Matrix:
python
[[2155  359    0    0    0    0    0    0]
 [1525  562    0    0    0    0    0    0]
 [ 153   91    0    0    0    0    0    0]
 [  57   54    0    0    0    0    0    0]
 [   8   11    0    0    0    0    0    0]
 [  10    2    0    0    0    0    0    0]
 [   2    7    0    0    0    0    0    0]
 [   1    3    0    0    0    0    0    0]]
Wer erkennt den Fehler?

Logik, Mengen & Beweistechnik
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Fuzzy-Logik: scharfes Ergebnis  
Beitrag No.2 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-04-29
lissy1234567
 

Hat keiner eine Idee??

Logik, Mengen & Beweistechnik
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Fuzzy-Logik: scharfes Ergebnis  
Beitrag No.1 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-04-28
lissy1234567
 

Weiß keiner etwas dazu?

Logik, Mengen & Beweistechnik
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Fuzzy-Logik: scharfes Ergebnis  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-04-27
lissy1234567
 

Hallo,

ich beschäftige mich gerade erstmals mit der Fuzzy-Logik und habe eine Frage zu den Eingangs/Ausgangsgrößen.
Wenn ich eine Aussage/Regel habe wie zum Beispiel "Wenn es warm ist, gehen wir ins Schwimmbad", dann kann ich als linguistische Variable "warm" verwenden und aufteilen in "kalt, angenehm und heiß" (oder ähnlich). Ich frage mich nun aber, wie es dann beim Ergebnis ist? Ich könnte ja dieses "ins Schwimmbad gehen" teilen in "zu Hause bleiben", "spazieren gehen", "ins Schwimmbad gehen" - je nach Temperatur, richtig?
Doch wie stelle ich diese Aktionen grafisch dar, also was ist meine x-Achse?

Bei der Temperatur ist es ja klar: x-Achse ist Grad Celsius bspw., aber eine scharfe Größe für die x-Achse des Ergebnisses gibt es nicht oder? Wie kann man das darstellen?

Danke :)

Algorithmen / Datenstrukturen
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Klassifikation und Knowledge Graphs  
Beitrag No.3 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-04-24
lissy1234567
J

Danke für den Tipp! Ich kenne den Titanic-Datensatz noch nicht, aber werde es mir gleich mal genauer ansehen :)

Trotzdem wär ich dankbar, wenn jemand vielleicht gerade zu folgendem Punkt was sagen kann:
Ist es überhaupt möglich, einen Datensatz zu finden, den man einerseits direkt auf ein supervised learning Verfahren anwenden kann und andererseits erst als KG darstellen kann und dann mittel Graph Embedding auf ein supervised learning Verfahren anwenden kann :)?

Algorithmen / Datenstrukturen
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Klassifikation und Knowledge Graphs  
Beitrag No.1 im Thread
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-04-24
lissy1234567
J

Kann denn keiner etwas dazu sagen?

Algorithmen / Datenstrukturen
Universität/Hochschule 
Thema eröffnet von: lissy1234567
Klassifikation und Knowledge Graphs  
Themenstart
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag2020-04-23
lissy1234567
J

Hallo,

ich lese mich gerade zu Knowledge Graphs (KGs) ein und habe eine Frage, bei der ich nicht genau weiß, ob/wie sie umzusetzen ist.

Gerne würde ich aus einem Dataset (welches man zB über kaggle.com bekommt etc.) zwei Dinge tun:
1. ein Klassifikations-Algorithmus anwenden, zB kNN (oder ein passender eben)
2. das gleiche Dataset als KG darstellen und dann den gleichen Algorithmus aus 1. anwenden

Jetzt gibt es ja inzwischen AmpliGraph und auf der Seite auch ein Beispiel mit einem Football-Match-Dataset, welches zuerst in ein KG verwandelt wird und dann XGBoost drauf angewandt wird. Hier weiß ich aber nicht, wie ich das Dataset so umformen könnte, dass ich direkt XGBoost drauf anwenden kann.
Tutorial:
Dataset von Kaggle:

Allgemein fallen mir keine gängigen Datasets (wie Iris, Wine,...) ein oder ich weiß nicht wie ich daraus einen vernünftigen KG machen könnte.

Kann mir da jemand Input geben:)?

VG,
lissy
 

Sie haben sehr viele Suchergebnisse
Bitte verfeinern Sie die Suchkriterien

[Die ersten 20 Suchergebnisse wurden ausgegeben]
Link auf dieses Suchergebnis hier
(noch mehr als 20 weitere Suchergebnisse)

-> [Suche im Forum fortsetzen]
 
 

 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]

used time 0.057401