2016-08-23 3 views
0

np.randomを何度も使用するプログラマがあります。今私は引数gpu=True/Falseを渡すことをユーザーに望んでいない。どのように再帰で終わらずにcm.CUDAMatrix(np.random.uniform(low=low, high=high, size=size))を返すようにnp.randomをオーバーライドできますか? 小さなコード変更でcudamatを使用するより良い方法はありますか?numpy.randomをオーバーライドしてcudamatを使用する

ありがとうございました。

もっとコードが必要な場合はコメントしてください。

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)) 
+0

特にnp.randomメソッドまたはクラス、あなたのコードの多くを投稿してください。単純にメソッドをオーバーロードすることはできますが、引数が何であるかを確認する必要があります。 –

+0

最後の2行は重要な行です。 – Peter234

答えて

1
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)) 

次に、あなたのインスタンスからそれを呼び出すことができます。

instance = FeedForwardNetwork(**kwargs) 

instance.np_random(True/False) 
+0

ありがとうございます。実際にnp.randomをオーバーライドする方法はないので、すべてのコードをnp_randomに変更する必要はありませんか? – Peter234

+0

numpyをnpとしてインポートした場合は、何もできません。開始点がnumpyライブラリで検索されるためです。つまり、numpyライブラリを変更すると、確実にそのメソッドをオーバーライドすることができます。 –

+0

それは私が欲しかったすべてでした!ご協力いただきありがとうございます。 – Peter234

関連する問題