#https://qiita.com/Nelca/items/8c0aaaf2a8452352ffe4 #https://ichi.pro/post/218892206272728 #https://keras.io/ja/getting-started/sequential-model-guide/ #https://www.tcom242242.net/entry/ai-2/deeplearning/%E3%80%90%E8%B6%85%E5%85%A5%E9%96%80%E3%80%81%E3%83%8B%E3%83%A5%E3%83%BC%E3%83%A9%E3%83%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%80%91keras%E3%81%A7%EF%BC%92%E5%80%A4%E5%88%86/ import numpy as np from scipy import signal import matplotlib.pyplot as plt #import pandas as pd #from pandas import DataFrame data = np.loadtxt( fname="daondata.csv", # 読み込みたいファイルのパス dtype="float", # 要素の方を指定 delimiter=",", # ファイルの区切り文字 ) [N,M]=data.shape dt = 0.00005 fs = 1/dt t=np.array(range(0,N-2))*dt hakei=1#1の場合波形 それ以外はパワースペクトルで分類 if hakei==1: for i in range(0,M): if i==0: b1=data.T[0][0:N-2] xx=b1 y=data.T[0][N-1] else: b1=data.T[i][0:N-2] xx=np.vstack((xx, b1)) y=np.append(y,data.T[i][N-2]) plt.figure(figsize=(12, 8)) # 1つ目のプロット plt.subplot(2,1,1) plt.plot(t,xx[0], label="ukinashi") plt.xlabel('time[sec]') plt.ylabel('roudness[dB]') plt.legend() # 2つ目のプロット plt.subplot(2,1,2) plt.plot(t, xx[302], label="ukiari") plt.xlabel('time[sec]') plt.ylabel('roudness[dB]') plt.legend() plt.show() else: for i in range(0,M): if i==0: a1=data.T[0][0:N-2] freq, b1 = signal.welch(a1, fs) xx=b1 y=data.T[0][N-1] else: a1=data.T[i][0:N-2] freq, b1 = signal.welch(a1, fs) xx=np.vstack((xx, b1)) y=np.append(y,data.T[i][N-2]) plt.figure(figsize=(12, 8)) # 1つ目のプロット plt.subplot(2,1,1) plt.plot(freq,xx[0], label="ukinashi") plt.xlabel('freq[Hz]') plt.ylabel('psp') plt.legend() # 2つ目のプロット plt.subplot(2,1,2) plt.plot(freq,xx[302], label="ukiari") plt.xlabel('freq[Hz]') plt.ylabel('psp') plt.legend() plt.show() from sklearn import model_selection import keras from keras.models import Model, Sequential from keras.layers import Input, Dense, Dropout, Activation from keras.layers import Conv2D, GlobalAveragePooling2D from keras.layers import BatchNormalization, Add from keras.callbacks import EarlyStopping, ModelCheckpoint #データの作成 randomseed=1 x_train, x_test, y_train, y_test = model_selection.train_test_split(xx, y, test_size=0.25, stratify=y,random_state=randomseed) #x_train, x_test, y_train, y_test = model_selection.train_test_split(xx, y, test_size=0.25, stratify=y,shuffle=True) print("x train:{0}\ny train:{1}\nx test:{2}\ny test:{3}".format(len(x_train), len(y_train), len(x_test), len(y_test))) #from keras.utils import np_utils #Y_one_hot = np_utils.to_categorical(y_train) classes = 2 y_train = keras.utils.to_categorical(y_train, classes) y_test = keras.utils.to_categorical(y_test, classes) # モデルの作成 model = Sequential() model.add(Dense(10, input_dim=len(x_train[0]))) # 入力層2ノード, 隠れ層に3ノード, 全結合 model.add(Activation("sigmoid")) # 活性化関数はsigmoid #model.add(Activation("relu")) # 活性化関数はrelu model.add(Dense(10)) # 層の追加 model.add(Dense(2)) # 出力層2ノード,全結合 model.add(Activation("sigmoid")) # 2値分類問題の場合 model.compile(optimizer='rmsprop', #model.compile(optimizer="adam", loss='binary_crossentropy', metrics=['accuracy']) # 訓練 history = model.fit(x_train, y_train, nb_epoch=20, batch_size=1) plt.plot(history.epoch, history.history["acc"], label="acc") plt.plot(history.epoch, history.history["loss"], label="loss") plt.xlabel("epoch") plt.legend() plt.show() # 評価 score = model.evaluate(x_test, y_test, verbose=1) print("Test score", score[0])#Test scoreが誤差 print("Test accuracy", score[1])#Test accuracy正答率 classes = model.predict_classes(x_test, batch_size=1) prob=model.predict_proba(x_test, batch_size=1)