#学習 x_cols = ["TEMP_okym","TEMP_hrsm"] + df.columns.tolist()[14:] X = df[x_cols] y = df["MW"] # ラベル付きデータをトレーニングセット (X_train, y_train)とテストセット (X_test,y_test)に分割 from sklearn import model_selection X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=.2, random_state=42) # 正規化 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(X_train) X_train = scaler.transform(X_train) X_test = scaler.transform(X_test) # Chainer読込 from chainer import Chain, optimizers, Variable import chainer.functions as F import chainer.links as L # ニューラルネットワークのモデル生成用クラス class MyChain(Chain): def __init__(self, n_units=10): super(MyChain, self).__init__( l1=L.Linear(len(x_cols), n_units), l2=L.Linear(n_units, n_units), l3=L.Linear(n_units, 1)) def __call__(self, x_data, y_data): x = Variable(x_data.astype(np.float32).reshape(len(x_data),len(x_cols))) y = Variable(y_data.astype(np.float32).reshape(len(y_data),1)) #print(x) pred = self.predict(x) #print(pred) return F.mean_squared_error(pred, y) def predict(self, x): h1 = F.relu(self.l1(x)) h2 = F.relu(self.l2(h1)) h3 = self.l3(h2) return h3 def get_predata(self, x): return self.predict(Variable(x.astype(np.float32).reshape(len(x),1))).data # パラメータ初期化 batchsize = 16 n_epoch = 200 n_units = 10 # モデル生成 model = MyChain(n_units) optimizer = optimizers.Adam() optimizer.setup(model) # 学習 train_losses =[] test_losses =[] N = len(X_train) for epoch in range(1, n_epoch + 1): perm = np.random.permutation(N) sum_loss = 0 for i in range(0, N, batchsize): x_batch = X_train[perm[i:i + batchsize]] y_batch = y_train[perm[i:i + batchsize]] model.zerograds() loss = model(x_batch,y_batch) sum_loss += loss.data * batchsize loss.backward() optimizer.update() average_loss = sum_loss / N train_losses.append(average_loss) loss = model(X_test,y_test) test_losses.append(loss.data) # 学習過程を出力 if epoch % 10 == 0: print("epoch: {}/{} train loss: {} test loss: {}".format(epoch, n_epoch, average_loss, loss.data))
このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
早速のご教授ありがとうございます。
y = Variable(y_data.astype(np.float32).reshape(len(y_data),1))
loss = model(x_batch,y_batch)
コードを実行すると上記ののコードにエラーがあるみたいです。
y_data.astype(np.float32) の実行結果はいったいナニモノかを調べてみましょう。
エラーメッセージには、そいつにはreshapeってのはないぞ、といってます
y_data.astype(np.float32)自体はy_dataというものを小数へ型変換?という意味かと思います。
他にも同じようなサンプルコードもあるし、ソースコード構造的にも非推奨になっていなさそうですし、
まだちょっとよく分からなくて困っています。
ちなみに、Qiitaの「Chainerで電力使用量予測」で抜粋しています。
ご教授ありがとうございます。
変更前:y = Variable(y_data.astype(np.float32).reshape(len(y_data),1))
変更後:y = Variable(y_data.values.astype(np.float32).reshape(len(y_data),1))
無事エラーが出ず解決しました。
回答2件
あなたの回答
tips
プレビュー