Julia Draw Something


In [1]:
using DataFrames
using TensorFlow
using Distributions
using Images


I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:116] Couldn't open CUDA library libcudnn.so.5. LD_LIBRARY_PATH: /usr/local/cuda/lib64
I tensorflow/stream_executor/cuda/cuda_dnn.cc:3459] Unable to load cuDNN DSO
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:125] successfully opened CUDA library libcurand.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally

In [2]:
data_set_folder = "/raided/datasets/sketches_png/png/"
list_of_imgs = open(data_set_folder * "filelist.txt")
img_paths = readlines(list_of_imgs)[1:400]
close(list_of_imgs)

In [3]:
train_paths = Array(String, 350)
count = 1
for i = 1:350
    train_paths[i] = img_paths[count]
    count += 1
    if count % 71 == 0
        count += 10
    end
end

test_paths = Array(String, 50)
count = 71
for i = 1:50
    test_paths[i] = img_paths[count]
    count += 1
    if count % 81 == 0
        count += 70
    end
end

In [4]:
files_in_folder = readdir(data_set_folder)
labels = filter(x->isdir(data_set_folder * x) == true, files_in_folder)


Out[4]:
250-element Array{String,1}:
 "airplane"     
 "alarm clock"  
 "angel"        
 "ant"          
 "apple"        
 "arm"          
 "armchair"     
 "ashtray"      
 "axe"          
 "backpack"     
 "banana"       
 "barn"         
 "baseball bat" 
 ⋮              
 "umbrella"     
 "van"          
 "vase"         
 "violin"       
 "walkie talkie"
 "wheel"        
 "wheelbarrow"  
 "windmill"     
 "wine-bottle"  
 "wineglass"    
 "wrist-watch"  
 "zebra"        

In [5]:
x = TensorFlow.placeholder(Float32)
y_ = TensorFlow.placeholder(Float32)
W = get_variable("weights", [77841, 5], Float32)
b = get_variable("bias", [5], Float32)


Out[5]:
TensorFlow.Variable(<Operation 'bias'>,<Operation 'bias/Assign'>)

In [6]:
y = nn.softmax(x*W + b)
cross_entropy = reduce_mean(-reduce_sum(y_ .* log(y), reduction_indices=[2]))
train_step = train.minimize(train.GradientDescentOptimizer(.00001), cross_entropy)


W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations.
W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations.
Out[6]:
<Tensor NoOp:1 shape=unknown dtype=?>

In [7]:
type DataLoader
    cur_id::Int
    order::Vector{Int}
end

TrainLoader() = DataLoader(1, shuffle(1:350))
TestLoader() = DataLoader(1, shuffle(1:50))


Out[7]:
TestLoader (generic function with 1 method)

In [8]:
function next_batch(loader::DataLoader, batch_size)
    x = zeros(Float32, batch_size, 77841)
    y = zeros(Float32, batch_size, 5)
    for i = 1:batch_size
        path = train_paths[loader.order[loader.cur_id]][1:end-1]
        println(path)
        sketch_name = split(path, "/")[1]
        img = load(data_set_folder * path)
        img = restrict(restrict(img))
        flatten_img = reshape(img, 77841)
        
        x[i, :] = flatten_img
        label = find((x -> x == sketch_name), labels)[1]
        y[i, label] = 1.0
        loader.cur_id += 1
        if loader.cur_id > 350
            loader.cur_id = 1
            break
        end
    end
    x, y
end


Out[8]:
next_batch (generic function with 1 method)

In [9]:
function get_test(loader::DataLoader)
    x = zeros(Float32, 50, 77841)
    y = zeros(Float32, 50, 5)
    for i = 1:50
        path = test_paths[loader.order[loader.cur_id]][1:end-1]
        sketch_name = split(path, "/")[1]
        img = load(data_set_folder * path)
        img = restrict(restrict(img))
        flatten_img = reshape(img, 77841)
        
        x[i, :] = flatten_img
        label = find((x -> x == sketch_name), labels)[1]
        println("--------------------------")
        println(label)
        println(loader.cur_id)
        y[i, label] = 1.0
        loader.cur_id += 1
        if loader.cur_id > 50
            println("========================")
            println(sketch_name)
            break
        end
    end
    x, y
end


Out[9]:
get_test (generic function with 1 method)

In [10]:
loader = TrainLoader()
sess = Session()
run(sess, initialize_all_variables())
for i in 1:35
    batch = next_batch(loader, 10)
    run(sess, train_step, Dict(x=>batch[1], y_=>batch[2]))
    println("DONE BATCH ", i)
end


angel/187.png
I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GTX 1070
major: 6 minor: 1 memoryClockRate (GHz) 1.683
pciBusID 0000:01:00.0
Total memory: 7.92GiB
Free memory: 7.82GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0)
ant/296.png
alarm clock/113.png
alarm clock/120.png
apple/385.png
alarm clock/122.png
airplane/3.png
angel/165.png
apple/342.png
apple/400.png
DONE BATCH 1
ant/241.png
alarm clock/142.png
apple/379.png
apple/365.png
ant/320.png
apple/380.png
alarm clock/157.png
ant/319.png
alarm clock/138.png
apple/384.png
DONE BATCH 2
alarm clock/125.png
airplane/53.png
ant/256.png
apple/345.png
airplane/39.png
ant/251.png
alarm clock/145.png
airplane/52.png
airplane/69.png
alarm clock/146.png
DONE BATCH 3
airplane/25.png
alarm clock/134.png
apple/373.png
ant/272.png
apple/398.png
airplane/31.png
airplane/6.png
ant/300.png
ant/245.png
apple/387.png
DONE BATCH 4
ant/312.png
angel/212.png
angel/228.png
airplane/71.png
apple/348.png
airplane/29.png
airplane/56.png
alarm clock/114.png
airplane/5.png
apple/340.png
DONE BATCH 5
angel/235.png
ant/249.png
airplane/7.png
alarm clock/91.png
airplane/1.png
angel/204.png
alarm clock/140.png
alarm clock/124.png
airplane/43.png
airplane/17.png
DONE BATCH 6
alarm clock/116.png
ant/247.png
ant/306.png
apple/392.png
angel/234.png
alarm clock/150.png
airplane/14.png
alarm clock/100.png
airplane/19.png
apple/383.png
DONE BATCH 7
alarm clock/128.png
apple/347.png
ant/278.png
angel/170.png
apple/335.png
airplane/4.png
ant/280.png
airplane/13.png
airplane/64.png
alarm clock/99.png
DONE BATCH 8
ant/252.png
apple/381.png
ant/314.png
airplane/61.png
airplane/38.png
angel/176.png
ant/267.png
airplane/48.png
angel/233.png
angel/163.png
DONE BATCH 9
angel/167.png
apple/324.png
apple/376.png
airplane/41.png
angel/224.png
ant/261.png
alarm clock/159.png
airplane/28.png
airplane/57.png
airplane/59.png
DONE BATCH 10
ant/308.png
ant/279.png
apple/393.png
alarm clock/111.png
ant/311.png
alarm clock/95.png
apple/334.png
ant/270.png
airplane/42.png
alarm clock/153.png
DONE BATCH 11
ant/243.png
angel/196.png
apple/390.png
angel/191.png
ant/260.png
apple/374.png
alarm clock/141.png
ant/307.png
ant/282.png
airplane/33.png
DONE BATCH 12
alarm clock/135.png
angel/180.png
ant/265.png
apple/328.png
alarm clock/139.png
airplane/49.png
apple/370.png
apple/353.png
airplane/20.png
ant/269.png
DONE BATCH 13
airplane/2.png
apple/341.png
angel/173.png
apple/366.png
alarm clock/107.png
angel/200.png
apple/329.png
airplane/36.png
angel/199.png
angel/171.png
DONE BATCH 14
airplane/46.png
apple/397.png
angel/232.png
angel/226.png
ant/297.png
alarm clock/98.png
ant/266.png
apple/332.png
angel/231.png
angel/193.png
DONE BATCH 15
ant/275.png
apple/330.png
apple/391.png
ant/304.png
angel/208.png
angel/188.png
alarm clock/127.png
apple/349.png
angel/185.png
airplane/34.png
DONE BATCH 16
ant/302.png
alarm clock/149.png
ant/244.png
angel/198.png
apple/321.png
alarm clock/94.png
apple/333.png
airplane/44.png
airplane/45.png
alarm clock/92.png
DONE BATCH 17
ant/274.png
angel/205.png
airplane/30.png
ant/259.png
airplane/47.png
ant/258.png
apple/327.png
alarm clock/109.png
angel/182.png
angel/189.png
DONE BATCH 18
airplane/12.png
angel/164.png
ant/248.png
angel/225.png
airplane/23.png
airplane/68.png
alarm clock/101.png
angel/201.png
airplane/67.png
apple/350.png
DONE BATCH 19
airplane/24.png
angel/190.png
ant/263.png
ant/283.png
alarm clock/136.png
alarm clock/104.png
alarm clock/102.png
apple/344.png
ant/273.png
angel/175.png
DONE BATCH 20
alarm clock/97.png
ant/305.png
airplane/21.png
ant/315.png
airplane/10.png
ant/271.png
angel/211.png
alarm clock/115.png
apple/339.png
ant/277.png
DONE BATCH 21
angel/210.png
ant/301.png
apple/336.png
alarm clock/137.png
alarm clock/112.png
alarm clock/118.png
angel/238.png
apple/367.png
angel/174.png
airplane/15.png
DONE BATCH 22
apple/371.png
airplane/60.png
angel/227.png
apple/368.png
angel/166.png
apple/388.png
ant/316.png
alarm clock/147.png
angel/203.png
airplane/22.png
DONE BATCH 23
airplane/16.png
apple/343.png
apple/354.png
ant/310.png
angel/183.png
alarm clock/158.png
angel/207.png
apple/382.png
ant/276.png
alarm clock/110.png
DONE BATCH 24
alarm clock/93.png
angel/237.png
apple/326.png
alarm clock/132.png
alarm clock/123.png
airplane/40.png
ant/318.png
airplane/55.png
ant/294.png
alarm clock/126.png
DONE BATCH 25
apple/386.png
alarm clock/160.png
apple/331.png
airplane/66.png
ant/309.png
alarm clock/103.png
ant/299.png
ant/254.png
angel/202.png
airplane/54.png
DONE BATCH 26
angel/209.png
airplane/50.png
alarm clock/143.png
apple/377.png
angel/194.png
apple/337.png
angel/168.png
apple/352.png
airplane/58.png
airplane/70.png
DONE BATCH 27
airplane/35.png
alarm clock/121.png
ant/303.png
angel/161.png
angel/230.png
alarm clock/117.png
ant/281.png
ant/250.png
apple/323.png
apple/338.png
DONE BATCH 28
airplane/65.png
airplane/18.png
ant/268.png
ant/262.png
alarm clock/154.png
angel/169.png
alarm clock/151.png
angel/181.png
airplane/72.png
airplane/51.png
DONE BATCH 29
alarm clock/131.png
angel/162.png
angel/197.png
alarm clock/156.png
apple/325.png
alarm clock/105.png
alarm clock/144.png
apple/351.png
airplane/11.png
angel/206.png
DONE BATCH 30
apple/375.png
apple/322.png
apple/396.png
alarm clock/96.png
angel/192.png
apple/372.png
ant/242.png
angel/239.png
apple/394.png
ant/257.png
DONE BATCH 31
alarm clock/133.png
alarm clock/152.png
ant/317.png
apple/369.png
angel/177.png
ant/264.png
alarm clock/155.png
airplane/26.png
angel/186.png
angel/184.png
DONE BATCH 32
alarm clock/119.png
apple/395.png
apple/399.png
ant/246.png
apple/346.png
airplane/62.png
airplane/37.png
angel/223.png
ant/298.png
angel/240.png
DONE BATCH 33
angel/229.png
alarm clock/130.png
ant/313.png
apple/389.png
angel/195.png
alarm clock/148.png
airplane/27.png
alarm clock/108.png
airplane/63.png
angel/178.png
DONE BATCH 34
angel/179.png
ant/255.png
ant/253.png
airplane/32.png
angel/172.png
apple/378.png
alarm clock/106.png
angel/236.png
alarm clock/129.png
ant/295.png
DONE BATCH 35

In [11]:
correct_prediction = indmax(y, 2) .== indmax(y_, 2)
accuracy=reduce_mean(cast(correct_prediction, Float64))
test_loader = TestLoader()
testx, testy = get_test(test_loader)

println(run(sess, indmax(y, 2), Dict(x=>testx, y_=>testy)))
println(run(sess, indmax(y_, 2), Dict(x=>testx, y_=>testy)))
println(run(sess, accuracy, Dict(x=>testx, y_=>testy)))


--------------------------
1
1
--------------------------
4
2
--------------------------
2
3
--------------------------
5
4
--------------------------
2
5
--------------------------
4
6
--------------------------
1
7
--------------------------
4
8
--------------------------
5
9
--------------------------
5
10
--------------------------
2
11
--------------------------
2
12
--------------------------
3
13
--------------------------
5
14
--------------------------
3
15
--------------------------
5
16
--------------------------
2
17
--------------------------
2
18
--------------------------
5
19
--------------------------
5
20
--------------------------
2
21
--------------------------
4
22
--------------------------
1
23
--------------------------
2
24
--------------------------
3
25
--------------------------
4
26
--------------------------
1
27
--------------------------
1
28
--------------------------
2
29
--------------------------
3
30
--------------------------
3
31
--------------------------
5
32
--------------------------
5
33
--------------------------
1
34
--------------------------
3
35
--------------------------
4
36
--------------------------
3
37
--------------------------
1
38
--------------------------
5
39
--------------------------
1
40
--------------------------
4
41
--------------------------
4
42
--------------------------
4
43
--------------------------
3
44
--------------------------
2
45
--------------------------
3
46
--------------------------
4
47
--------------------------
3
48
--------------------------
1
49
--------------------------
1
50
========================
airplane
[4,2,2,2,0,2,2,1,2,2,0,2,2,2,4,1,1,1,2,3,4,2,2,2,2,2,1,2,4,2,2,2,2,2,4,1,2,1,2,2,2,3,1,2,3,1,1,4,2,2]
[0,3,1,4,1,3,0,3,4,4,1,1,2,4,2,4,1,1,4,4,1,3,0,1,2,3,0,0,1,2,2,4,4,0,2,3,2,0,4,0,3,3,3,2,1,2,3,2,0,0]
0.18

In [12]:
function sketch_input(path, sketch_name)
    x = zeros(Float32, 1, 77841)
    y = zeros(Float32, 1, 10)
    img = load(path)
    img = restrict(restrict(img))
    flatten_img = reshape(img, 77841)
    x[1, :] = flatten_img
    
    label = find((x -> x == sketch_name), labels)[1]
    y[1, label] = 1.0
    
    x, y
end


Out[12]:
sketch_input (generic function with 1 method)

In [13]:
sketch_path = "/raided/datasets/sketches_png/png/airplane/79.png"
sketch_label = "airplane"

test_img, test_label = sketch_input(sketch_path, sketch_label)
what_it_thinks = labels[run(sess, indmax(y,2), Dict(x=>test_img, y_=>test_label))[1] + 1]
println("Is it an " * what_it_thinks * "? Answer: ", (sketch_label == what_it_thinks), ".")


Is it an angel? Answer: false.

In [ ]: