大学のゼミで一か月ほど前からpythonの勉強を始めました。
研究室のパソコンでは動いたのですが自宅のPCで試したところCPUを使う動作では動いてくれたのですがGPUを使うと
エラーメッセージ
RuntimeError: CUDA environment is not correctly set up
(see https://github.com/chainer/chainer#installation).No module named 'cupy'
というエラーが出ます
自分でいろいろ試して
この二つをPCにインストールしたのですがやはり同じエラーが出ます
どうやって直せばいいのでしょうか?
ちなみに今回実行しているプログラムはすでに完成しているものをコピペしたものです。
# coding: utf-8 # A feedforward neural network for the MNIST problem. # Copyright (C) 2016 Atsumi Laboratory. All rights reserved. import numpy as np from numpy.core.multiarray import dtype import chainer from chainer import optimizers, cuda, datasets, Variable, Chain import chainer.functions as F import chainer.links as L import time class Fnn(Chain): """3層フィードフォワードネットワーク """ def __init__(self, num_of_input_units, num_of_hidden_units, num_of_output_units): """3層フィードフォワードネットワークの生成 Args: num_of_input_units (int): 入力層ユニット数 num_of_hidden_units (int): 隠れ層ユニット数 num_of_output_units (int): 出力層ユニット数 """ super().__init__( l1 = L.Linear(num_of_input_units, num_of_hidden_units), l2 = L.Linear(num_of_hidden_units, num_of_hidden_units), l3 = L.Linear(num_of_hidden_units, num_of_output_units), ) # def __call__(self, x, t): """順伝播による誤差計算 Args: x (a variable of variables of floats): 入力ミニバッチ t (a variable of variables of int): 入力ミニバッチに対する教師出力 Returns: loss (float): 誤差(損失) """ y = self.forward(x) loss = F.softmax_cross_entropy(y, t) # softmax function & cross entropy error function return loss # def forward(self, x): """順伝播 Args: x (a variable of variables of floats): 入力ミニバッチ Returns: y (a variable of variables of floats): 入力ミニバッチに対する出力 """ h1 = F.relu(self.l1(x)) # Rectified linear function h2 = F.relu(self.l2(h1)) # Rectified linear function y = self.l3(h2) # Identity mapping return y # def dataset(): """MNISTデータセット設定 Returns: train_data_i (a list of lists of floats): 訓練データの入力配列 train_data_t (a list of ints): 訓練データの教師配列 test_data_i (a list of lists of floats): テストデータの入力配列 test_data_t (a list of ints): テストデータの教師配列 size_of_train_data (int): 訓練データ数 size_of_test_data (int): テストデータ数 """ train_data, test_data = datasets.get_mnist() size_of_train_data = len(train_data) size_of_test_data = len(test_data) train_data_i = [train_data[i][0] for i in range(size_of_train_data)] train_data_t = [train_data[i][1] for i in range(size_of_train_data)] print(train_data[0][0].dtype) print(train_data[0][1].dtype) test_data_i = [test_data[i][0] for i in range(size_of_test_data)] test_data_t = [test_data[i][1] for i in range(size_of_test_data)] return train_data_i, train_data_t, test_data_i, test_data_t, size_of_train_data, size_of_test_data # def learn(model, optimizer, num_of_epoch, size_of_minibatch, train_data_i, train_data_t, size_of_train_data, xp): """学習 Args: model (Fnn): FNNモデル optimizer (Optimizer): オプティマイザ num_of_epoch (int): エポック数 size_of_minibatch (int): ミニバッチサイズ train_data_i (a list of lists of floats): 訓練データの入力配列 train_data_t (a list of ints): 訓練データの教師配列 size_of_train_data (int): 訓練データ数 xp (numpy or cuda.cupy): numpy or cuda.cupy """ for epoch in range(num_of_epoch): print(' epoch='+str(epoch), end=' ') indexes = np.random.permutation(size_of_train_data) sum_loss = 0 for i in range(0, size_of_train_data, size_of_minibatch): x = Variable(xp.array([train_data_i[ind] for ind in indexes[i:i+size_of_minibatch]], dtype=xp.float32)) t = Variable(xp.array([train_data_t[ind] for ind in indexes[i:i+size_of_minibatch]], dtype=xp.int32)) model.zerograds() loss = model(x, t) loss.backward() optimizer.update() sum_loss += loss.data * len(x.data) print(', mean_loss='+str(sum_loss/size_of_train_data)) # def test(model, size_of_minibatch, test_data_i, test_data_t, size_of_test_data, xp): """テスト Args: model (Fnn): FNNモデル size_of_minibatch (int): ミニバッチサイズ test_data_i (a list of lists of floats): テストデータの入力配列 test_data_t (a list of ints): テストデータの教師配列 size_of_test_data (int): テストデータ数 xp (numpy or cuda.cupy): numpy or cuda.cupy Returns: mean_loss (float): 平均誤差(損失) accuracy (float): アキュラシー """ sum_loss, sum_accuracy = 0, 0 for i in range(0, size_of_test_data, size_of_minibatch): x = Variable(xp.array(test_data_i[i:i+size_of_minibatch], dtype=xp.float32)) t = Variable(xp.array(test_data_t[i:i+size_of_minibatch], dtype=xp.int32)) with chainer.no_backprop_mode(): y = model.forward(x) sum_loss += F.softmax_cross_entropy(y, t).data * len(x.data) sum_accuracy += F.accuracy(y, t).data * len(x.data) mean_loss = sum_loss/size_of_test_data accuracy = sum_accuracy/size_of_test_data return mean_loss, accuracy # if __name__ == '__main__': # パラメータ設定 num_of_input_units = 784 num_of_hidden_units = 1000 num_of_output_units = 10 num_of_epoch = 20 size_of_minibatch = 100 use_gpu = True # GPUの準備 if use_gpu: cuda.get_device(0).use() xp = cuda.cupy else: xp = np # 訓練データとテストデータの準備 print('MNIST dataset preparation') train_data_i, train_data_t, test_data_i, test_data_t, size_of_train_data, size_of_test_data = dataset() print(' size of train data = '+str(size_of_train_data)) print(' size of test data = '+str(size_of_test_data)) # モデルの作成 print('Model configuration') model = Fnn(num_of_input_units, num_of_hidden_units, num_of_output_units) if use_gpu: model.to_gpu() optimizer = optimizers.SGD() optimizer.setup(model) # 学習 print('Learning') start_time = time.time() learn(model, optimizer, num_of_epoch, size_of_minibatch, train_data_i, train_data_t, size_of_train_data, xp) elapsed_time = time.time() - start_time print(' elapsed time for learning: {} [sec]'.format(elapsed_time)) # テスト print('Test') mean_loss, accuracy = test(model, size_of_minibatch, test_data_i, test_data_t, size_of_test_data, xp) print(' mean_loss='+str(mean_loss)+'\n accuracy='+str(accuracy))
こちらになります
GPUの準備と書かれているところのすぐ上にあるuse_gpu = TrueとなっているところをFalseと直すとCPUで処理されます
回答3件
あなたの回答
tips
プレビュー