mirror of
https://github.com/explosion/spaCy.git
synced 2025-07-07 21:33:13 +03:00
Fix GPU usage
This commit is contained in:
parent
7698903617
commit
ce876c551e
30
spacy/_ml.py
30
spacy/_ml.py
|
@ -136,13 +136,14 @@ class PrecomputableAffine(Model):
|
||||||
|
|
||||||
def _add_padding(self, Yf):
|
def _add_padding(self, Yf):
|
||||||
Yf_padded = self.ops.xp.vstack((self.pad, Yf))
|
Yf_padded = self.ops.xp.vstack((self.pad, Yf))
|
||||||
return Yf_padded[1:]
|
return Yf_padded
|
||||||
|
|
||||||
def _backprop_padding(self, dY, ids):
|
def _backprop_padding(self, dY, ids):
|
||||||
for i in range(ids.shape[0]):
|
# (1, nF, nO, nP) += (nN, nF, nO, nP) where IDs (nN, nF) < 0
|
||||||
for j in range(ids.shape[1]):
|
d_feats = dY[ids]
|
||||||
if ids[i, j] < 0:
|
ids = ids.reshape((ids.shape[0], ids.shape[1], 1, 1))
|
||||||
self.d_pad[0, j] += dY[i, j]
|
d_feats *= ids < 0
|
||||||
|
self.d_pad += d_feats.sum(axis=0, keepdims=True)
|
||||||
return dY, ids
|
return dY, ids
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
@ -157,12 +158,15 @@ class PrecomputableAffine(Model):
|
||||||
'''
|
'''
|
||||||
if (model.W**2).sum() != 0.:
|
if (model.W**2).sum() != 0.:
|
||||||
return
|
return
|
||||||
model.ops.normal_init(model.W, model.nF * model.nI, inplace=True)
|
ops = model.ops
|
||||||
|
xp = ops.xp
|
||||||
|
ops.normal_init(model.W, model.nF * model.nI, inplace=True)
|
||||||
|
|
||||||
ids = numpy.zeros((5000, model.nF), dtype='i')
|
ids = ops.allocate((5000, model.nF), dtype='f')
|
||||||
ids += numpy.asarray(numpy.random.uniform(0, 1000, ids.shape), dtype='i')
|
ids += xp.random.uniform(0, 1000, ids.shape)
|
||||||
tokvecs = numpy.zeros((5000, model.nI), dtype='f')
|
ids = ops.asarray(ids, dtype='i')
|
||||||
tokvecs += numpy.random.normal(loc=0., scale=1.,
|
tokvecs = ops.allocate((5000, model.nI), dtype='f')
|
||||||
|
tokvecs += xp.random.normal(loc=0., scale=1.,
|
||||||
size=tokvecs.size).reshape(tokvecs.shape)
|
size=tokvecs.size).reshape(tokvecs.shape)
|
||||||
|
|
||||||
def predict(ids, tokvecs):
|
def predict(ids, tokvecs):
|
||||||
|
@ -185,10 +189,10 @@ class PrecomputableAffine(Model):
|
||||||
t_i = 0
|
t_i = 0
|
||||||
for t_i in range(t_max):
|
for t_i in range(t_max):
|
||||||
acts1 = predict(ids, tokvecs)
|
acts1 = predict(ids, tokvecs)
|
||||||
var = numpy.var(acts1)
|
var = model.ops.xp.var(acts1)
|
||||||
mean = numpy.mean(acts1)
|
mean = model.ops.xp.mean(acts1)
|
||||||
if abs(var - 1.0) >= tol_var:
|
if abs(var - 1.0) >= tol_var:
|
||||||
model.W /= numpy.sqrt(var)
|
model.W /= model.ops.xp.sqrt(var)
|
||||||
elif abs(mean) >= tol_mean:
|
elif abs(mean) >= tol_mean:
|
||||||
model.b -= mean
|
model.b -= mean
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue
Block a user