Aby nieco powiększyć komentarz @ sung-kim:
- CNN są używane przede wszystkim do rozwiązywania problemów związanych z obrazowaniem komputerowym, takich jak klasyfikowanie obrazów za pomocą . Są one wzorowane na kortach wzrokowych zwierząt, mają one w zasadzie sieć połączeń tak, że istnieją kafelki o cechach, które częściowo się pokrywają. Zazwyczaj wymagają one dużo danych o wartości ponad 30 tys.
- Autoenery są używane do generowania obiektów i redukcji wymiarów. Zaczynają się od wielu neuronów na każdej warstwie, a następnie liczba ta jest zmniejszana, a następnie zwiększana ponownie. Każdy obiekt jest szkolony sam. Powoduje to, że warstwy środkowe (niska liczba neuronów) zapewniają znaczącą projekcję przestrzeni cech w niskim wymiarze.
- Chociaż nie wiem zbyt wiele o DBN, wydają się być nadzorowanym rozszerzeniem Autoencodera. Wiele parametrów do treningu.
- Znowu nie wiem dużo o maszynach Boltzmann, ale nie są one powszechnie stosowane dla tego rodzaju problemu (według mojej wiedzy)
jak w przypadku wszystkich problemów modelowania chociaż, proponuję począwszy od najbardziej podstawowy model, aby szukać sygnału. Być może dobrym miejscem na rozpoczęcie jest Logistic Regression, zanim zaczniesz się martwić o głębokie uczenie się.
Jeśli doszedłeś do punktu, w którym chcesz spróbować głębokiego uczenia się, z jakichkolwiek powodów. W przypadku tego typu danych najlepszym miejscem do rozpoczęcia jest podstawowa sieć przekazywania informacji. Pod względem głębokiego uczenia się, punkty danych 30k nie są dużą liczbą, więc zawsze najlepiej zacząć od małej sieci (1-3 ukrytych warstw, 5-10 neuronów), a następnie zwiększyć. Upewnij się jednak, że przy optymalizacji parametrów masz przyzwoity zestaw sprawdzania poprawności. Jeśli fanem scikit-learn
API, proponuję Keras jest dobrym miejscem do rozpoczęcia
jeden dodatkowy komentarz, będziemy chcieli użyć OneHotEncoder na etykietach klasowych, zanim zrobisz żadnego szkolenia.
EDIT
widzę z dobroci i komentarze, które chcesz zobaczyć nieco więcej na temat sieci te prace. Proszę zapoznać się z przykładem, jak zbudować model feed-forward i zrobić kilka prostych parametr optisation
import numpy as np
from sklearn import preprocessing
from keras.models import Sequential
from keras.layers.core import Dense, Activation, Dropout
# Create some random data
np.random.seed(42)
X = np.random.random((10, 50))
# Similar labels
labels = ['good', 'bad', 'soso', 'amazeballs', 'good']
labels += labels
labels = np.array(labels)
np.random.shuffle(labels)
# Change the labels to the required format
numericalLabels = preprocessing.LabelEncoder().fit_transform(labels)
numericalLabels = numericalLabels.reshape(-1, 1)
y = preprocessing.OneHotEncoder(sparse=False).fit_transform(numericalLabels)
# Simple Keras model builder
def buildModel(nFeatures, nClasses, nLayers=3, nNeurons=10, dropout=0.2):
model = Sequential()
model.add(Dense(nNeurons, input_dim=nFeatures))
model.add(Activation('sigmoid'))
model.add(Dropout(dropout))
for i in xrange(nLayers-1):
model.add(Dense(nNeurons))
model.add(Activation('sigmoid'))
model.add(Dropout(dropout))
model.add(Dense(nClasses))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='sgd')
return model
# Do an exhaustive search over a given parameter space
for nLayers in xrange(2, 4):
for nNeurons in xrange(5, 8):
model = buildModel(X.shape[1], y.shape[1], nLayers, nNeurons)
modelHist = model.fit(X, y, batch_size=32, nb_epoch=10,
validation_split=0.3, shuffle=True, verbose=0)
minLoss = min(modelHist.history['val_loss'])
epochNum = modelHist.history['val_loss'].index(minLoss)
print '{0} layers, {1} neurons best validation at'.format(nLayers, nNeurons),
print 'epoch {0} loss = {1:.2f}'.format(epochNum, minLoss)
które wyjścia
2 layers, 5 neurons best validation at epoch 0 loss = 1.18
2 layers, 6 neurons best validation at epoch 0 loss = 1.21
2 layers, 7 neurons best validation at epoch 8 loss = 1.49
3 layers, 5 neurons best validation at epoch 9 loss = 1.83
3 layers, 6 neurons best validation at epoch 9 loss = 1.91
3 layers, 7 neurons best validation at epoch 9 loss = 1.65
Jeśli dobrze rozumiem, nakarmisz [feat_1 feat_2 ... feat_n] i przepiszesz etykietę, prawda? W tym przypadku, ponieważ masz tylko ~ 10 cech, powiedziałbym, że waniliowa sieć neuronowa będzie dobrym początkiem. –
Co sprawia, że Deep Learning jest twoim paradygmatem wyboru? Sądzę, że najpierw wypróbujesz Naive Bayes, Losowy Las, SVM o wielu klasach lub podobną strukturę. – Prune
Czy klasyfikacja jest skalarnym kontinuum, takim jak ocena 1-10? Jeśli tak, możesz lepiej z funkcją ciągłego oceniania, po prostu zaokrąglając do najbliższej liczby całkowitej. – Prune