Metryki accuracy, precision, recall, F1-score

Metryki accuracy, precision, recall, F1-score
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Jestem w trakcie pisania kodu odnośnie sieci neuronowych , program pracuje na 1200 zdjęciach na których są robione dane testowe , treningowe , walidacyjne itp. , poniżej jest link do mojego githuba , gdzie można sobie zobaczyć mój kod :
Działam na keras , tensorflow

https://github.com/dawid584/sign-language/blob/master/Untitled5.ipynb

Natomiast nie wiem jak zrobić jak w tytule podane metryki ?

W internecie jest napisane np. coś takiego -

tf.keras.metrics.Accuracy(name="accuracy", dtype=None) a potem
m = tf.keras.metrics.Accuracy() m.update_state([[1], [2], [3], [4]], [[0], [2], [3], [4]])
m.result().numpy() 0.75

Tylko , ja nie wiem co mam wprowadzić zamiast 1], [2], [3], [4, 0], [2], [3], [4 bo u mnie to są dane :

train_size = int(np.floor(0.8 * size)) a size to rozmiar zbioru załądownych plików zdjęć .
valid_size = int(np.floor(0.1 * size))
test_size = size - train_size - valid_size

Jak przygotować dane by móc je wprowadzić do metryki i zrobić podane metryki ? To mają być dane treningowe i testowe i potem X_pred i y_pred ? Bo z podanego modelu który jest na moim githubie to nie wiem jak to zrobić ?

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

Przewiduj etykiety za pomocą modelu na danych treningowych

Kopiuj
train_predictions = model.predict(X_train)
train_predicted_labels = np.argmax(train_predictions, axis=1)

Porównaj przewidywane etykiety z prawdziwymi etykietami

Kopiuj
train_accuracy = tf.keras.metrics.Accuracy()
train_accuracy.update_state(y_train, train_predicted_labels)
print("Train Accuracy:", train_accuracy.result().numpy())
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
uziom napisał(a):

Przewiduj etykiety za pomocą modelu na danych treningowych

Kopiuj
train_predictions = model.predict(X_train)
train_predicted_labels = np.argmax(train_predictions, axis=1)

Porównaj przewidywane etykiety z prawdziwymi etykietami

Kopiuj
train_accuracy = tf.keras.metrics.Accuracy()
train_accuracy.update_state(y_train, train_predicted_labels)
print("Train Accuracy:", train_accuracy.result().numpy())

Chodzi o to , że jak mam w sklearn X_train , y_train ,X_test ,y_test = train_test_split( X , y , .......) . To nie wiem co z mojego kodu wstawić jako X i jako y ? Bo u mnie jest zmienna size która równa się= ( originale_A (pobiera zdjęcia z jednego folderu) + original_B (pobiera zdjęcia z drugiego folderu , każde zdjęcie to np A1.jpg potem A2.jpg itp ).
Jak zrobię X = int ( size0,8) i y=(size0,2) to mi pokazuje błąd, jak zrobię to samo ale len (size*0,8) to mi też błąd pokazuje, że to jedno wymiarowa tablica z jedną liczbą,a ma być 2D. I trochę nie wiem jak to zrobić w tej sytuacji.

Jak przejdę ten problem i będę miał X_train , y_train , X_ test itp. to w zasadzie prlbelm będzie rozwiazany , ale nie wiem w tej sytuacji co zrobić by mieć tte zmienne.

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

np pisze coś takiego :
X , y = int(np.floor(0.8 * size)) , int(np.floor(0.2 * size))
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=4, stratify=y)

to mam błąd: TypeError: Singleton array array(40) cannot be considered a valid collection.

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
2

Jeśli masz listę plików ze zdjęciami, to musisz je wczytać jako tablicę NumPy i przetworzyć na odpowiedni format, który może być używany jako wejście do Twojego modelu. Możesz to zrobić za pomocą biblioteki OpenCV lub PIL.

Na przykład, jeśli chcesz wczytać obrazy z dwóch folderów i utworzyć tablicę NumPy dla danych treningowych.

Kopiuj
import cv2
import numpy as np
import os

# ścieżki do folderów z danymi
folder_A = "ścieżka/do/folderu/A"
folder_B = "ścieżka/do/folderu/B"

# wczytanie obrazów z folderu A
data_A = []
for file in os.listdir(folder_A):
    img = cv2.imread(os.path.join(folder_A, file))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    data_A.append(img)

# wczytanie obrazów z folderu B
data_B = []
for file in os.listdir(folder_B):
    img = cv2.imread(os.path.join(folder_B, file))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    data_B.append(img)

# łączenie danych z dwóch folderów w jedną tablicę
X = np.array(data_A + data_B)

# utworzenie etykiet (0 dla folderu A, 1 dla folderu B)
y = np.array([0]*len(data_A) + [1]*len(data_B))

W tym przykładzie X to tablica NumPy z obrazami, a y to tablica NumPy z etykietami odpowiadającymi obrazom.

Następnie możesz użyć funkcji train_test_split z biblioteki scikit-learn, aby podzielić dane na zbiór treningowy i testowy

Kopiuj
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

W tym przykładzie test_size=0.2 oznacza, że 20% danych zostanie użyte do testowania modelu, a 80% do treningu. random_state pozwala na powtórzenie wyników w przyszłości.

Teraz możesz przeprowadzić trenowanie modelu i obliczyć dokładność na danych treningowych i testowych, tak jak to zrobiłeś w swoim przykładzie

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Ok przetestuje , chwila , oby teraz było wszytko ok.

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1
dawid584 napisał(a):

np pisze coś takiego :
X , y = int(np.floor(0.8 * size)) , int(np.floor(0.2 * size))
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=4, stratify=y)

to mam błąd: TypeError: Singleton array array(40) cannot be considered a valid collection.

W Twoim przykładzie próbujesz podzielić wartości X i y na zbiór treningowy i testowy przed zastosowaniem funkcji train_test_split(), co powoduje błąd.

Funkcja train_test_split() przyjmuje jako argumenty dwie tablice NumPy (lub listy): jedną zawierającą dane (w Twoim przypadku X), a drugą zawierającą odpowiadające im etykiety (w Twoim przypadku y).

Kopiuj
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=4, stratify=y)
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Już mi działa to , dzięki

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Zrobiłem:

X = np.array(data_A + data_B + data_C + data_0)
y = np.array([0]*len(data_A) + [1]*len(data_B) + [2]*len(data_C) + [3]*len(data_0))
potem:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=4, stratify=y)
I tu wszytsko działa kompiluje się , natomiast , poniżej :

Próbuje to teraz wstawić do modelu aby mieć predykcje i mając predykcje wstawić to do metryki , ale mam pewien problem :

from sklearn.linear_model import LogisticRegression
lr_model = LogisticRegression()
lr_model.fit(X_train, y_train) # trenowanie modelu
y_predict_train = lr_model.predict(X_train)
y_predict_test = lr_model.predict(X_test)

ValueError: Found array with dim 4. LogisticRegression expected <= 2.

Z drugiej strony jak próbuje to zrobić w ten sposób , czyli model_5 na którym robiłem dotychczasowe rzeczy to mam taki błąd :

train_predictions = model_5.predict(X_train)
train_predicted_labels = np.argmax(train_predictions, axis=1)

ValueError: Input 0 of layer "sequential_84" is incompatible with the layer: expected shape=(None, 150, 150, 3), found shape=(None, 240, 320, 3)

edytowany 2x, ostatnio: dawid584
UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

model LogisticRegression oczekuje, że wejściowe dane X_train będą miały maksymalnie 2 wymiary. W Twoim przypadku X_train ma 4 wymiary. Być może wartości w X zostały źle ukształtowane lub źle połączone. Spróbuj ponownie przetestować X i y, upewnij się, że są one w odpowiednim formacie.

Wymiary wejściowe nie odpowiadają wymiarom, które sieć neuronowa oczekuje. Wymiar wejściowy modelu jest zdefiniowany jako (None, 150, 150, 3), a Ty podajesz dane o wymiarze (None, 240, 320, 3). Upewnij się, że Twoje dane wejściowe mają wymiary zgodne z wymaganiami sieci neuronowej, którą próbujesz użyć.

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Koda napisałem w sposób jak poniżej:

Kopiuj
import numpy as np
import os

# ścieżki do folderów z danymi
folder_A = "C:\Kodilla\sign langugage\Data\A"  - #1050 zdjęć
folder_B = "C:\Kodilla\sign langugage\Data\B"    #50 zdjęć
folder_C = "C:\Kodilla\sign langugage\Data\C"    #50 zdjęć
folder_0 = r"C:\Kodilla\sign langugage\Data\0"    #50 zdjęć
# wczytanie obrazów z folderu A
data_A = []
data_B = []
data_C = []
data_0 = []
for file in os.listdir(folder_A):
    img = cv2.imread(os.path.join(folder_A, file))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    data_A.append(img)

# wczytanie obrazów z folderu B
for file in os.listdir(folder_B):
    img = cv2.imread(os.path.join(folder_B, file))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    data_B.append(img)
# wczytanie obrazów z folderu C
for file in os.listdir(folder_C):
    img = cv2.imread(os.path.join(folder_C, file))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    data_C.append(img)

# wczytanie obrazów z folderu 0
for file in os.listdir(folder_0):
    img = cv2.imread(os.path.join(folder_0, file))
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    data_0.append(img)    

# łączenie danych z dwóch folderów w jedną tablicę
X = np.array(data_A + data_B + data_C + data_0)

# utworzenie etykiet (0 dla folderu A, 1 dla folderu B)
y = np.array([0]*len(data_A) + [1]*len(data_B) + [2]*len(data_C) + [3]*len(data_0))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=4, stratify=y)
edytowany 1x, ostatnio: dawid584
UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

Spróbuj importu funkcji train_test_split() z modułu sklearn.model_selection, która jest wykorzystywana w ostatniej linii kodu.

dodajnastępującą na początku swojego kodu

Kopiuj
from sklearn.model_selection import train_test_split
UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

zmienna folder_A jest przypisywana wartości "C:\Kodilla\sign langugage\Data\A". znak \ jest używany jako znak specjalny, dlatego należy umieścić przed nim przedrostek r (raw string), aby oznaczyć, że to ma być dosłownie traktowane jako ciąg znaków.

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Sprawdzę czy to r przed tym coś pomoże

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Niestety nic to nie pomogło cay czas mam ,że jak chce zrobić , to ponizej to pokazuje błąd odnośnie tych tablic: , Chwilę temu to mi aż komputer się zawiesił podczas trensowania. :D

Kopiuj
from sklearn.preprocessing import StandardScaler

lr_model = LogisticRegression()
lr_model.fit(X_train, y_train) # trenowanie modelu

Cały czas mam takie coś:  ValueError: Found array with dim 4. LogisticRegression expected <= 2.
UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
0
Kopiuj
folder_A = r"C:\Kodilla\sign langugage\Data\A" #1050 zdjęć
folder_B = r"C:\Kodilla\sign langugage\Data\B" #50 zdjęć
folder_C = r"C:\Kodilla\sign langugage\Data\C" #50 zdjęć
folder_0 = r"C:\Kodilla\sign langugage\Data\0" #50 zdjęć
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
1
uziom napisał(a):
Kopiuj
folder_A = r"C:\Kodilla\sign langugage\Data\A" #1050 zdjęć
folder_B = r"C:\Kodilla\sign langugage\Data\B" #50 zdjęć
folder_C = r"C:\Kodilla\sign langugage\Data\C" #50 zdjęć
folder_0 = r"C:\Kodilla\sign langugage\Data\0" #50 zdjęć

dodałem te r przed '' i mam to samo cały czas , sam nie wiem co z tym jest...

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

Chyba problem leży w zbyt wiele wymiarów w danych wejściowych. LogisticRegression spodziewa się, że dane wejściowe będą miały maksymalnie dwa wymiary, natomiast dane wejściowe mają cztery wymiary.

Trzeba jakoś spłaszczyć dane wejściowe do dwóch wymiarów. Może na przykład za pomocą metody reshape() w bibliotece NumPy, jeśli dane wejściowe mają odpowiedni kształt. Na przykład, jeśli dane wejściowe są w formacie (liczba próbek, szerokość, wysokość, liczba kanałów), można użyć reshape(), aby spłaszczyć je do postaci (liczba próbek, szerokośćwysokośćliczba kanałów

Kopiuj
import numpy as np

X_train_flat = np.reshape(X_train, (X_train.shape[0], -1))
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

ok. sprawdze

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

Aby spłaszczyć zdjęcia do dwóch wymiarów, jest metoda reshape() z biblioteki NumPy, tak jak w poprzednim poście . Jednakże, zanim zastosujesz reshape(), musisz upewnić się, że wymiary twojego zbioru zdjęć są takie same dla każdego zdjęcia.

Jeśli zdjęcia są w formacie (liczba próbek, szerokość, wysokość, liczba kanałów), to musisz najpierw zredukować wymiar kanałów, jeśli chcesz pozbyć się tego wymiaru i spłaszczyć zdjęcia do dwóch wymiarów. Możesz to zrobić, używając metody mean() z biblioteki NumPy, aby obliczyć średnią po trzecim wymiarze i zmniejszyć wymiar kanałów do jednego

Kopiuj
import numpy as np

X_train_flat = np.mean(X_train, axis=3)

Następnie reshape(), aby spłaszczyć każde zdjęcie do jednego wymiaru

Kopiuj
X_train_flat = np.reshape(X_train_flat, (X_train.shape[0], -1))
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

jhjhjhj.png

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
0

Możesz skopiować tutaj to?

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0
uziom napisał(a):

Możesz skopiować tutaj to?

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=4)
X_train_flat = np.mean(X_train, axis=3)
X_train_flat = np.reshape(X_train, (X_train.shape[0], -1))
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

lr_model = LogisticRegression()
lr_model.fit(X_train_flat, y_train) # trenowanie modelu

C:\Users\Dawid Dymke\AppData\Local\Programs\Python\Python310\lib\site-packages\sklearn\linear_model_logistic.py:458: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

Increase the number of iterations (max_iter) or scale the data as shown in:
https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
n_iter_i = _check_optimize_result(

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Zrobiłem jak poniżej ,ale obliczyło mi tylko jedną metrykę accuracy , a co do pozostałych to mam błąd

Accuracy: 0.9646464646464646
ValueError: Target is multiclass but average='binary'. Please choose another average setting, one of [None, 'micro', 'macro', 'weighted'].

Kopiuj
X_train_flat = np.reshape(X_train, (X_train.shape[0], -1))

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

lr_model = LogisticRegression()
lr_model.fit(X_train_flat, y_train) # trenowanie modelu

X_test_flat = np.mean(X_test, axis=3)
X_test_flat = np.reshape(X_test, (X_test.shape[0], -1))

y_predict_test = lr_model.predict(X_test_flat)

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

print('Accuracy: ', accuracy_score(y_test, y_predict_test))
print("Precision:", precision_score(y_test, y_predict_test))
print("Recall:", recall_score(y_test, y_predict_test))
print("F1_score:", f1_score(y_test, y_predict_test))
edytowany 1x, ostatnio: dawid584
UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

Można spróbować zwiększyć maksymalną liczbę iteracji, podając większą wartość dla argumentu "max_iter" w funkcji "LogisticRegression()". Na przykład

Kopiuj
lr_model = LogisticRegression(max_iter=1000)

Spróbować zmienić solver na inny, np. "saga" lub "liblinear". Dodając argument "solver" do funkcji "LogisticRegression()"

Kopiuj
lr_model = LogisticRegression(solver='saga')
UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

kod, który powinien obliczyć wszystkie metryki dla problemu wieloklasowego

Kopiuj
X_train_flat = np.reshape(X_train, (X_train.shape[0], -1))

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

lr_model = LogisticRegression()
lr_model.fit(X_train_flat, y_train) # trenowanie modelu

X_test_flat = np.mean(X_test, axis=3)
X_test_flat = np.reshape(X_test, (X_test.shape[0], -1))

y_predict_test = lr_model.predict(X_test_flat)

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

print('Accuracy: ', accuracy_score(y_test, y_predict_test))
print("Precision:", precision_score(y_test, y_predict_test, average='macro'))
print("Recall:", recall_score(y_test, y_predict_test, average='macro'))
print("F1_score:", f1_score(y_test, y_predict_test, average='macro'))

Lub

Kopiuj
 X_train_flat = np.reshape(X_train, (X_train.shape[0], -1))

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler

lr_model = LogisticRegression()
lr_model.fit(X_train_flat, y_train) # trenowanie modelu

X_test_flat = np.mean(X_test, axis=3)
X_test_flat = np.reshape(X_test, (X_test.shape[0], -1))

y_predict_test = lr_model.predict(X_test_flat)

from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score

print('Accuracy: ', accuracy_score(y_test, y_predict_test))
print("Precision:", precision_score(y_test, y_predict_test, average='weighted'))
print("Recall:", recall_score(y_test, y_predict_test, average='weighted'))
print("F1_score:", f1_score(y_test, y_predict_test, average='weighted'))
edytowany 1x, ostatnio: uziom
D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

sprawdzę już , ale pewnie będzie już ok. moment bo mi trochę muli

D5
  • Rejestracja:ponad 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:41
0

Działa , dzięki za pomoc

UZ
  • Rejestracja:około 2 lata
  • Ostatnio:prawie 2 lata
  • Postów:36
1

Super

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)