Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def main(use_gpu=False, nb_epoch=50):
if use_gpu:
Model.ops = CupyOps()
Model.Ops = CupyOps
train, test = datasets.imdb()
print("Load data")
train_X, train_y = zip(*train)
test_X, test_y = zip(*test)
train_y = to_categorical(train_y, nb_classes=2)
test_y = to_categorical(test_y, nb_classes=2)
nlp = Language()
dev_X = train_X[-1000:]
dev_y = train_y[-1000:]
train_X = train_X[:-1000]
train_y = train_y[:-1000]
print("Parse data")
train_X = [nlp.make_doc(x) for x in train_X]
def require_gpu(gpu_id=0):
from ._classes.model import Model
from .ops import CupyOps
if CupyOps.xp is None:
raise ValueError("GPU is not accessible. Was the library installed correctly?")
Model.Ops = CupyOps
Model.ops = CupyOps()
set_active_gpu(gpu_id)
return True
def require_gpu(gpu_id=0):
from ._classes.model import Model
from .ops import CupyOps
if CupyOps.xp is None:
raise ValueError("GPU is not accessible. Was the library installed correctly?")
Model.Ops = CupyOps
Model.ops = CupyOps()
set_active_gpu(gpu_id)
return True
def require_gpu(gpu_id=0):
from ._classes.model import Model
from .ops import CupyOps
if CupyOps.xp is None:
raise ValueError("GPU is not accessible. Was the library installed correctly?")
Model.Ops = CupyOps
Model.ops = CupyOps()
set_active_gpu(gpu_id)
return True
raise IOError("Can't open output location: %s" % out_loc)
print(cfg)
if pooling == "mean+max":
pool_layer = Pooling(mean_pool, max_pool)
elif pooling == "mean":
pool_layer = mean_pool
elif pooling == "max":
pool_layer = max_pool
else:
raise ValueError("Unrecognised pooling", pooling)
print("Load spaCy")
nlp = get_spacy("en_vectors_web_lg")
if use_gpu:
Model.ops = CupyOps()
print("Construct model")
# Bind operators for the scope of the block:
# * chain (>>): Compose models in a 'feed forward' style,
# i.e. chain(f, g)(x) -> g(f(x))
# * clone (**): Create n copies of a model, and chain them, i.e.
# (f ** 3)(x) -> f''(f'(f(x))), where f, f' and f'' have distinct weights.
# * concatenate (|): Merge the outputs of two models into a single vector,
# i.e. (f|g)(x) -> hstack(f(x), g(x))
Model.lsuv = True
# Model.ops = CupyOps()
with Model.define_operators({">>": chain, "**": clone, "|": concatenate, "+": add}):
mwe_encode = ExtractWindow(nW=1) >> LN(
Maxout(width, drop_factor=0.0, pieces=pieces)
)
def mean_pool(X_lengths, drop=0.0):
X, lengths = X_lengths
if isinstance(X, numpy.ndarray):
ops = NumpyOps()
else:
ops = CupyOps()
output = ops.mean_pool(X, lengths)
def finish_update(d_output, sgd=None):
d_output = ops.xp.ascontiguousarray(d_output)
return ops.backprop_mean_pool(d_output, lengths)
return output, finish_update
def prefer_gpu(gpu_id=0):
"""Use GPU if it's available. Returns True if so, False otherwise."""
from .ops import CupyOps
if CupyOps.xp is None:
return False
else:
require_gpu(gpu_id=gpu_id)
return True
def forward(X, drop=0.0):
if isinstance(X, numpy.ndarray):
ops = NumpyOps()
else:
ops = CupyOps()
output = ops.xp.ascontiguousarray(X[:, idx], dtype=X.dtype)
def backward(y, sgd=None):
dX = ops.allocate(X.shape)
dX[:, idx] += y
return dX
return output, backward
def to_gpu(self, device_num):
import cupy.cuda.device
device = cupy.cuda.device.Device(device_num)
device.use()
queue = [self]
for layer in queue:
layer.ops = CupyOps()
layer.Ops = CupyOps
if hasattr(layer, "_mem"):
layer._mem._mem = self.ops.xp.asarray(layer._mem._mem)
layer._mem.ops = layer.ops
if hasattr(layer, "_layers"):
queue.extend(layer._layers)
return device