機械学習の予測モデルを作成しており,2種類の方法で作成しています.
1つはtesorflowベースで作成して,完成したのですが,pytorchベースで作りたいと思い,現在,pytorchベースでの予測メゾット用のコードを作成しています.完成した方のプログラムではnumpy型配列でデータを取得して,リストに入れて,そのリストの中の要素数がある一定の数になったら,ラベルを予測するようにしています.それをpytorchベースのほうでも行いたいのですが,うまく行かないで,どなたかご教示の程,よろしくお願い致します.
単純にコード変えるだけだけでうまく行くと思ったのですが,うまくいうまく行きませんでした.
Ex) response = np.argmax(np.bincount(temp))# numpy形式
↓
response = torch.argmax(torch.bincount(temp)) # tensor形式
###やりたいこと
得られるデータの最頻値を計算し、その最大要素のインデントを求めます。response
インデントをリストに入れますtemp
次に64個要素がリストに入ったら(tmp)
計算グラフで計算します。
この流れです
###エラー文
response = torch.argmax(torch.bincount(temp)) RuntimeError: "bincount_cpu" not implemented for 'Float'
元々のコード tensroflowとnumpy形式
from collections import deque from threading import Lock import myo import time import numpy as np import tensorflow as tf from include.model import model from time import sleep x, y, output, global_step, y_pred_cls = model() saver = tf.train.Saver() _SAVE_PATH = "./data/tensorflow_sessions/myo_armband/" # "C:/Users/name/Desktop/myo-python-1.0.4/myo-armband-nn-master/data/tensorflow_sessions/myo_armband/" #sleep(0.1) sess = tf.Session() try: print("Trying to restore last checkpoint ...") last_chk_path = tf.train.latest_checkpoint(checkpoint_dir=_SAVE_PATH) print(last_chk_path) saver.restore(sess, save_path=last_chk_path) print("Restored checkpoint from:", last_chk_path) except: print("Failed to restore checkpoint. Initializing variables instead.") sess.run(tf.global_variables_initializer()) class MyListener(myo.DeviceListener): """ classe en écoute d'un myo """ def __init__(self, queue_size=8): self.lock = Lock() self.pose = myo.Pose.rest # pose quelconque self.connected = False # non connecté self.battery_level = 100 # niveau de batterie maximal self.emg_enabled = False # on acquiert pas les EMG self.locked = False # myo non vérouillé self.rssi = None # aucune valeur de force du signal bluetooth self.emg = None # données null des emg self.device_name = None # pas de nom du myo self.device = None self.myo_firmware = None self.arm = None self.x_direction = None self.sync = None def on_emg(self, event): with self.lock: self.emg_data_queue.append((event.timestamp, event.emg)) def get_emg_data(self): with self.lock: return list(self.emg_data_queue) if __name__ == '__main__': myo.init(bin_path=r'C:\Users\name\Desktop\myo-sdk-win-0.9.0\bin') HUB = myo.Hub() listener = MyListener() start = time.time() temp = [] with HUB.run_in_background(listener.on_event): while True: data = listener.get_emg_data() # 得られたキューをリストにします. if time.time() - start >= 10: response = np.argmax(np.bincount(temp)) # 最頻値の最大値のインデックスを返します. print("Predicted gesture: {0}".format(response)) temp = []# それらをリストに入れます. start = time.time() if len(data) > 0: tmp = [] # 空のリストを入れます. for v in listener.get_emg_data(): tmp.append(v[1]) # データを1つずつ読み込み,リストに入れます. tmp = list(np.stack(tmp).flatten()) if len(tmp) >= 64: #>=64 データの数が64個になったら pred = sess.run(y_pred_cls, feed_dict={x: np.array([tmp])}) # 計算グラフで計算します.(モデル) temp.append(pred[0]) # 予測ラベルをtempに入れます, with open("name1_pred_ANN.csv", "a") as f: np.savetxt(f, pred, fmt="%s", delimiter=",") sleep(0.01) コード
現在,実装中のコードpytorchベース,numpy形式から変換したい場所だけ記載します.
if __name__ == '__main__': myo.init(bin_path=r'C:\Users\name\Desktop\myo-sdk-win-0.9.0\bin') HUB = myo.Hub() model.eval() listener = MyListener() start = time.time() temp = [] with HUB.run_in_background(listener.on_event): while True: data = listener.get_emg_data() # 得られたキューをリストにします #print(temp) if time.time() - start >= 1: #response = np.argmax(np.bincount(temp))# **numpy形式** 最頻値の最大のインデックス返す temp = torch.stack(temp, dim=1) response = torch.argmax(torch.bincount(temp)) **エラー箇所** response.tolist() print("Predicted gesture: {0}".format(response)) temp = [] start = time.time() if len(data) > 0: # len(data) = 8 tmp = [] for v in listener.get_emg_data(): tmp.append(v[1]) tmp = list(np.stack(tmp).flatten()) tmp = torch.tensor(tmp) # tensor型に変換(listの中身を) #print(tmp) if len(tmp) >= 64: pred = model(tmp) #pred = torch.mean(_,predicted, feed_dict={x: np.array([tmp])}) #pred = sess.run(y_pred_cls, feed_dict={x: np.array([tmp])}) print(pred) temp.append(pred[0]) sleep(0.01)
あなたの回答
tips
プレビュー