Sieci neuronowe
Marcin Orchel
1 Wstęp 2 Zadania
2.1 Zadania na 3.0
Napisać skrypt w R. W skrypcie
• dla wygenerowanych danych dwuwymiarowych dwóch klas z rozkładów normal- nych zaznacz na wykresie dane treningowe, klasyfikator sieciami neuronowymi, dla różnej liczby neuronów w warstwach ukrytych i różnej liczbie warstw
• oblicz błąd klasyfikacji na zbiorze testowym dla klasyfikatora
• wykorzystać walidację krzyżową do testowania jakości
• wyświetlić sieć neuronową
• przetestować wyszukiwanie optymalnych wartości hiperparametrów sieci
• sprawdzić na wolframalpha.com jaka jest wartość przewidywana dla sieci z jednym neuronem dla x = 1
• wyświetlić na wolframalpha.com funkcję predykcji dla 1 neuronu, a także dla 3 neuronów
Wskazówki do R
• w poleceniu neuralnet można testować również sieci z wieloma warstwami ukrytymi
• aby była brana pod uwagę funkcja aktywacji w poleceniu neuralnet należy ustawić parametr linear.output na false, w przeciwnym razie na wyjściu otrzymujemy tylko iloczyn skalarny
• wyraz wolny jest dodawany do iloczynu skalarnego
• http://search.r-project.org/library/neuralnet/html/neuralnet.html
• https://www.rdocumentation.org/packages/nnet/topics/nnet
• tuning hiperparametrówhttps://www.rdocumentation.org/packages/e1071/topics/
tune.wrapper Wskazówki do Matlaba
• http://www.mathworks.com/help/nnet/gs/fit-data-with-a-neural-network.
html
• przykładowe zbiory danychhttp://www.mathworks.com/help/nnet/gs/neural- network-toolbox-sample-data-sets.html
• http://www.mathworks.com/matlabcentral/fileexchange/35364-fast-multilayer- neural-network-training/content/demo.m
• http://www.mathworks.com/help/nnet/gs/classify-patterns-with-a-neural- network.html
• http://www.mathworks.com/help/nnet/ug/adaptive-neural-network-filters.
html
Przykłady
• nn.iris<-nnet(irys, kli, skip=TRUE, softmax=TRUE, size=3, col=2, decay=0.01, maxit=1000)
print(summary(nn.iris))
y.pred<-predict(nn.iris, irys, type="class")
• granica decyzyjna require("MASS") require("e1071") n <- 2
A <- matrix(runif(n^2)*2-1, ncol=n) sigma <- t(A) %*% A
B <- matrix(runif(n^2)*2-1, ncol=n) sigma2 <- t(B) %*% B
points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(2, 1), sigma2) points1b<-cbind(rep(1, 1000), points1) points2b<-cbind(rep(-1, 1000), points2) allPoints<-rbind(points1b, points2b)
allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V1
allPointsDataFrame$V1 <- as.factor(allPointsDataFrame$V1) w <- allPointsDataFrame$V2
l <- allPointsDataFrame$V3
#svm.model<-svm(as.factor(c)~w+l, data=allPointsDataFrame,
# kernel="radial", gamma=1.5, cost=10000,
# cross=0, scale=FALSE)
svm.model<-nnet(as.factor(c)~w+l, data=allPointsDataFrame, skip=TRUE, softmax=FALSE, size=30, col=2, decay=0.01, maxit=1000)
print(summary(svm.model))
y.theoretical <- fitted(svm.model)
#print(table(c, y.theoretical)) min.w <- min(w)
max.w <- max(w) min.l <- min(l) max.l <- max(l)
#plot(svm.model, allPointsDataFrame, w~l, svSymbol="o",
#dataSymbol="o")
zerojeden <- ifelse((svm.model$decision.values > 0), 1, 0) plot(allPoints[,2], allPoints[,3], col = zerojeden + 1, xlim =
c(-5,5), ylim=c(-5,5))
plot(allPoints[,2], allPoints[,3], col = allPoints[,1]+2, xlim = c(min.w,max.w), ylim=c(min.l,max.l))
x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)
myallPointsDataFrameT<-expand.grid(w=x, l=y) n <- length(x)
y.pred <- predict(svm.model, myallPointsDataFrameT) z <- y.pred
zerojeden <- ifelse((y.pred > 0.5), 1, 0)
contour(x, y, matrix(zerojeden, n), add=TRUE, levels=0.5, labcex = 0,
drawlabels = FALSE)
#v <- t(svm.model$coefs) %*% svm.model$SV
#b <- -svm.model$rho
#abline(a=-b/v[1,2], b=-v[1,1]/v[1,2], col="black", lty=1)
#abline(a=-(b-1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)
#abline(a=-(b+1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)
#plot(allPoints[,3], z, xlim = c(-5,5), ylim=c(-5,5))
• przykład z neuralnet require("MASS") require("e1071") require("neuralnet") n <- 2
A <- matrix(runif(n^2)*2-1, ncol=n) sigma <- t(A) %*% A
B <- matrix(runif(n^2)*2-1, ncol=n) sigma2 <- t(B) %*% B
points1<-mvrnorm(n = 1000, c(-1, -1), sigma) points2<-mvrnorm(n = 1000, c(-1.5, -2), sigma2) points1b<-cbind(rep(1, 1000), points1)
points2b<-cbind(rep(-1, 1000), points2) allPoints<-rbind(points1b, points2b)
allPointsDataFrame<-as.data.frame(allPoints) c <- allPointsDataFrame$V1
allPointsDataFrame$V1 <- as.factor(allPointsDataFrame$V1) w <- allPointsDataFrame$V2
l <- allPointsDataFrame$V3
#svm.model<-svm(as.factor(c)~w+l, data=allPointsDataFrame,
#kernel="radial", gamma=1.5, cost=10000,
#
#cross=0, scale=FALSE)
#svm.model<-nnet(as.factor(c)~w+l, data=allPointsDataFrame,
# skip=TRUE, softmax=FALSE, size=30, col=2,
# decay=0.01, maxit=1000)
svm.model<-neuralnet(c~w+l, data=allPointsDataFrame, hidden=c(2)) print(summary(svm.model))
y.theoretical <- fitted(svm.model)
#print(table(c, y.theoretical)) min.w <- min(w)
max.w <- max(w) min.l <- min(l) max.l <- max(l)
#plot(svm.model, allPointsDataFrame, w~l, svSymbol="o",
#dataSymbol="o")
zerojeden <- ifelse((svm.model$decision.values > 0), 1, 0) plot(allPoints[,2], allPoints[,3], col = zerojeden + 1, xlim =
c(-5,5), ylim=c(-5,5))
plot(allPoints[,2], allPoints[,3], col = allPoints[,1]+2, xlim = c(min.w,max.w), ylim=c(min.l,max.l))
x<- seq(min.w, max.w, length=100) y<- seq(min.l, max.l, length=100)
myallPointsDataFrameT<-expand.grid(w=x, l=y) n <- length(x)
y.pred <- compute(svm.model, myallPointsDataFrameT)$net.result z <- y.pred
zerojeden <- ifelse((y.pred > 0.5), 1, 0)
contour(x, y, matrix(zerojeden, n), add=TRUE, levels=0.5, labcex = 0,
drawlabels = FALSE)
#v <- t(svm.model$coefs) %*% svm.model$SV
#b <- -svm.model$rho
#abline(a=-b/v[1,2], b=-v[1,1]/v[1,2], col="black", lty=1)
#abline(a=-(b-1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)
#abline(a=-(b+1)/v[1,2], b=-v[1,1]/v[1,2], col="orange", lty=3)
#plot(allPoints[,3], z, xlim = c(-5,5), ylim=c(-5,5))
2.2 Zadania na 4.0
• wykonać klasyfikację na wybranych danych rzeczywistych siecią neuronową wielo- warstową z członem momentum
Wskazówki do Matlaba
• http://www.mathworks.com/help/nnet/examples/training-a-deep-neural-network- for-digit-classification.html
2.3 Zadania na 5.0
• przetestować sieć konwolucyjną
• przetestować algorytm Levenberga-Marquardta Wskazówki do Matlaba
• http://www.mathworks.com/help/nnet/ref/trainlm.html
• http://yann.lecun.com/exdb/mnist/
• http://www.mathworks.com/matlabcentral/fileexchange/24291-cnn-convolutional- neural-network-class