2016-03-26 24 views
2

İki dask dizim var, yani a ve b. BenDizin dizilerindeki dizi işlemleri

>>>z2 = da.from_array(a.dot(b),chunks=1) 
>>> z2 
dask.array<from-ar..., shape=(3, 3), dtype=int32, chunksize=(1, 1)> 

aşağıdaki gibi a ve b Nokta ürününü almak Ama

sigmoid(z2) 

yaptığınızda Kabuk çalışma durur. Onu bile öldüremem. ...

def sigmoid(z): 
     return 1/(1+np.exp(-z)) 

cevap

2

Dask Diziler ile çalışan, bu dask.array sağlanan işlevleri kullanmak normalde en iyisidir. NumPy işlevlerini doğrudan kullanmayla ilgili sorun, Dask Array öğesindeki verileri belleğe çekecek ve bu da yaşadığınız kabuğun donmasına neden olabilir. dask.array'da verilen işlevler, bunları değerlendirmek istediğiniz sürece, hesaplamaları hızlı bir şekilde zincirleme ile önleyecek şekilde tasarlanmıştır. Bu durumda, np.exp yerine da.exp kullanmak daha iyi olurdu. Bunun bir örneği aşağıda verilmiştir. Bunun nasıl yapılacağını göstermek için kodunuzun değiştirilmiş bir sürümünü sağladınız. Örnekte .compute()'u aradım, bu da tam sonucu belleğe çekiyor. Verileriniz çok büyükse bunun sizin için sorunlara yol açması olasıdır. Bu nedenle, sonucu küçük ve bellek dostu tutmak için bilgi çağırmadan önce verilerin küçük bir bölümünü aldığımı gösterdim. Verileriniz büyükse ve tam sonucu tutmak istiyorsanız, bunun yerine diske kaydetmenizi öneririz.

Bu yardımcı olur umarım.

In [1]: import dask.array as da 

In [2]: def sigmoid(z): 
    ...:  return 1/(1 + da.exp(-z)) 
    ...: 

In [3]: d = da.random.uniform(-6, 6, (100, 110), chunks=(10, 11)) 

In [4]: ds = sigmoid(d) 

In [5]: ds[:5, :6].compute() 
Out[5]: 
array([[ 0.0067856 , 0.31701817, 0.43301395, 0.23188129, 0.01530903, 
     0.34420555], 
     [ 0.24473798, 0.99594466, 0.9942868 , 0.9947099 , 0.98266004, 
     0.99717379], 
     [ 0.92617922, 0.17548207, 0.98363658, 0.01764361, 0.74843615, 
     0.04628735], 
     [ 0.99155315, 0.99447542, 0.99483032, 0.00380505, 0.0435369 , 
     0.01208241], 
     [ 0.99640952, 0.99703901, 0.69332886, 0.97541982, 0.05356214, 
     0.1869447 ]]) 
1

Anladım Denedim ve işe yaradı: Sigmoid aşağıda verilmiştir!

ans = z2.map_blocks(sigmoid)