티스토리 뷰
Flux in Julia/Flux in Julia
단일신경망 Single Layer Neural Network (ver. Flux in Julia) (수정)
딥스탯 2018. 11. 27. 17:07참고자료¶
http://jorditorres.org/first-contact-with-tnesorflow/#cap4 (First Contact with tensorflow)
https://deepstat.tistory.com/9 (단일신경망 Single Layer Neural Network (ver. Tensorflow for Python)
https://deepstat.tistory.com/10 (단일신경망 Single Layer Neural Network (ver. Tensorflow for R)
http://fluxml.ai/ (flux: The Elegant Machine Learning Stack)
단일신경망 Single Layer Neural Network (ver. Flux in Julia)¶
The MNIST data-set¶
In [1]:
using PyCall
@pyimport tensorflow.keras.datasets.mnist as MNIST
In [2]:
mnist_train, mnist_test = MNIST.load_data()
println(typeof(mnist_train))
println(typeof(mnist_test))
In [3]:
mnist_train[1][1,:,:]
Out[3]:
In [4]:
mnist_test[1][1]
Out[4]:
next_batch
라는 함수 만들기.¶
In [5]:
mutable struct My_data
data::Tuple
start_n::Int
end
In [6]:
function next_batch(data::My_data, n::Int)
start_n = data.start_n
end_n = data.start_n + n - 1
batch_X = data.data[1][start_n:end_n,:,:]
batch_Y = data.data[2][start_n:end_n]
data.start_n = (end_n+1) % (size(data.data[1])[1])
return float(reshape(batch_X,:,784)), float(batch_Y)
end
Out[6]:
In [7]:
train_dat = My_data(mnist_train,1)
test_dat = My_data(mnist_test,1);
Single layer neural network¶
In [8]:
using Flux
변수 지정¶
In [9]:
W = param(rand(10,784)./20 .- 1/40)
b = param(rand(10)./20 .- 1/40);
모형 설정 Activation function : softmax¶
In [10]:
function model(X)
tX = transpose(X)
yhat = softmax(W * tX .+ b)
return yhat
end
Out[10]:
Loss function : cross-entropy¶
In [11]:
function cross_entropy(X,Y)
y_onehot = Flux.onehotbatch(Y,sort(unique(Y)))
yhat = model(X)
loss = sum(-y_onehot .* log.(yhat))./length(Y)
return loss
end
Out[11]:
Optimizer : ADAM (learning_rate = 0.0001)¶
In [12]:
PARS = params(W,b)
for i = 0:1000
train_X, train_Y = next_batch(train_dat,6000)
Flux.train!(cross_entropy, [(train_X, train_Y)], ADAM((PARS), 0.0001))
if i % 100 == 0
train_loss = cross_entropy(train_X,train_Y)
test_X, test_Y = next_batch(test_dat,10000)
tmp_test = findmax(model(test_X).data, dims=1)
test_acc = sum([tmp_test[2][j][1] for j in 1:10000] .== (test_Y .+ 1))/10000
println("step:",i," train_loss:" ,train_loss," test_acc:" ,test_acc)
end
end
In [ ]:
'Flux in Julia > Flux in Julia' 카테고리의 다른 글
Autoencoder (ver. Flux in Julia) (0) | 2018.12.05 |
---|---|
CNN Convolutional Neural Network (ver. Flux in Julia) (0) | 2018.12.03 |
선형 회귀분석 Linear regression (ver. Flux in Julia) (0) | 2018.11.25 |