简体   繁体   English

覆盖numpy.random以使用cudamat

[英]Override numpy.random to use cudamat

I have a programm that uses np.random many times. 我有一个程序多次使用np.random。 Now I wan't the user to pass an argument gpu=True/False . 现在,我不希望用户传递参数gpu=True/False How can I override np.random to return cm.CUDAMatrix(np.random.uniform(low=low, high=high, size=size)) without ending in a recursion? 如何覆盖np.random以返回cm.CUDAMatrix(np.random.uniform(low=low, high=high, size=size))而不必以递归结尾? Or is there a better way to use cudamat with small code changes? 还是有更好的方法来使用cudamat进行少量代码更改?

Thanks for your help. 谢谢你的帮助。

If you need more code please comment. 如果您需要更多代码,请发表评论。

class FeedForwardNetwork():

    def __init__(self, input_dim, hidden_dim, output_dim, dropout=False, dropout_prop=0.5, gpu=True):            
        np.random.seed(1)
        self.input_layer = np.array([])
        self.hidden_layer = np.array([])
        self.output_layer = np.array([])
        self.input_dim = input_dim
        self.hidden_dim = hidden_dim
        self.output_dim = output_dim
        self.dropout = dropout
        self.dropout_prop = dropout_prop

        r_input_hidden = math.sqrt(6 / (input_dim + hidden_dim))
        r_hidden_output = math.sqrt(6 / (hidden_dim + output_dim))

        self.weights_input_hidden = np.random.uniform(low=-0.01, high=0.01, size=(input_dim, hidden_dim))
        self.weights_hidden_output = np.random.uniform(low=-0.01, high=0.01, size=(hidden_dim, output_dim))
class FeedForwardNetwork():

def __init__(self, input_dim, hidden_dim, output_dim, dropout=False, dropout_prop=0.5, gpu=True):            
    np.random.seed(1)
    self.input_layer = np.array([])
    self.hidden_layer = np.array([])
    self.output_layer = np.array([])
    self.input_dim = input_dim
    self.hidden_dim = hidden_dim
    self.output_dim = output_dim
    self.dropout = dropout
    self.dropout_prop = dropout_prop

    r_input_hidden = math.sqrt(6 / (input_dim + hidden_dim))
    r_hidden_output = math.sqrt(6 / (hidden_dim + output_dim))

    self.weights_input_hidden = np.random.uniform(low=-0.01, high=0.01, size=(input_dim, hidden_dim))
    self.weights_hidden_output = np.random.uniform(low=-0.01, high=0.01, size=(hidden_dim, output_dim))

def np_random(self, gpu):
   '''gpu:bool'''
     if gpu:
         return np.random.uniform(low=-0.01, high=0.01, size=(self.input_dim, self.hidden_dim))
    else:
         return np.random.uniform(low=-0.01, high=0.01, size=(self.hidden_dim, self.output_dim))

Then you can call it from your instance: 然后,您可以从实例中调用它:

instance = FeedForwardNetwork(**kwargs)

instance.np_random(True/False)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM