質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2960閲覧

ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=5, found

proad

総合スコア1

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

CNN (Convolutional Neural Network)

CNN (Convolutional Neural Network)は、全結合層のみではなく畳み込み層とプーリング層で構成されるニューラルネットワークです。画像認識において優れた性能を持ち、畳み込みニューラルネットワークとも呼ばれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/05/16 16:16

前提・実現したいこと

cnnを使用して加速度から行動を分類するプログラムを作成しています.
解決しようといろいろ調べてみましたがわかりません.
どなたかわかる方がいましたらご教授お願いします.

発生している問題・エラーメッセージ

ValueError: Input 0 of layer sequential is incompatible with the layer: : expected min_ndim=5, found ndim=2. Full shape received: (None, 28)

該当のソースコード

python

1from tabnanny import verbose 2import numpy as np 3from numpy.fft import fftn 4import pandas as pd 5import collections 6from sklearn.model_selection import train_test_split 7import tensorflow as tf 8from tensorflow.keras.models import Sequential 9from tensorflow.keras.layers import Dense, Activation, Conv3D,LeakyReLU,Flatten, Dropout 10from tensorflow.keras.utils import to_categorical 11from keras.utils import np_utils 12from tensorflow.keras.optimizers import Adam 13 14#csvファイルの読み込み 15df = pd.read_csv('./data.csv',header = 0,dtype={'time':'float','accx':'float','accy':'float','accz':'float','label':'float'},encoding="UTF-8") 16 17#使わない列を削除 18df = df.drop(df.loc[:,['rotax', 'rotay', 'rotaz']],axis = 1) 19print(df.head()) 20 21df['accc'] = np.sqrt(df['accx']**2 + df['accy']**2 + df['accz']**2) 22print(df.head()) 23 24labels = df['label'].unique() 25headers = ['accx','accy','accz','accc'] 26fft_batch_size = 32 27 28def get_best_size(v,fft_batch_size): 29 still = True 30 for best_size in reversed(range(0,v.size)): 31 if best_size % fft_batch_size == 0: 32 return best_size 33 34data = [] 35target = [] 36 37for label in labels: 38 v = np.array(df[df['label']==label][headers].values) 39 v = v[0:get_best_size(v.T[0],fft_batch_size)] 40 41 features = [] 42 43 for i , header in enumerate(headers): 44 sensor_data = v.T[i].reshape((int( v.T[i].size/fft_batch_size),fft_batch_size)) 45 features.append(sensor_data.mean(axis = 1).tolist()) 46 features.append(sensor_data.max(axis = 1).tolist()) 47 features.append(sensor_data.min(axis = 1).tolist()) 48 features.append(sensor_data.std(axis = 1).tolist()) 49 features.append(sensor_data.var(axis = 1).tolist()) 50 51 F = np.fft.fft(sensor_data) 52 F_abs = np.abs(F) / fft_batch_size * 2. 53 F_abs.T[0] = F_abs.T[0] / 2. 54 F_data = (F_abs.T[:int(sensor_data[0].size/2)+1]).T 55 features.append(F_data.argmax(axis=1).tolist()) 56 features.append(F_data.max(axis=1).tolist()) 57 58 if i == 0: 59 for lll in list(range(0, sensor_data.max(axis=1).size) ): 60 target.append(label) 61 62 data.extend(np.array(features).T.tolist()) 63 64data = np.array(data) 65target = np.array(target) 66 67target = np_utils.to_categorical(target) 68 69x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.3,random_state=3) 70 71num_classes = 4 #出力層 72 73#モデル 74model = Sequential() 75model.add(Conv3D(32, kernel_size=(5, 5, 5),input_shape=(64, 64, 64, 1), data_format='channels_last')) 76model.add(LeakyReLU(0.2)) 77for _ in range(2): 78 model.add(Conv3D(32, kernel_size=(5, 5, 5), data_format='channels_last')) 79 model.add(LeakyReLU(0.2)) 80model.add(Flatten()) 81model.add(Dense(256)) 82model.add(LeakyReLU(0.2)) 83model.add(Dropout(0.5)) 84model.add(Dense(num_classes)) 85model.add(Activation('softmax')) 86model.summary() 87 88# モデルのコンパイル 89model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy']) 90 91# モデルの学習 92history = model.fit(x_train, y_train, batch_size=32, epochs=50, validation_data=(x_test, y_test), verbose=1) 93 94train_score = model.evaluate(x_train,y_train) 95test_score = model.evaluate(x_test,y_test) 96print('Train loss',train_score[0]) 97print('Train accuracy',train_score[1]) 98print('Test loss:', test_score[0]) 99print('Test accuracy:', test_score[1]) 100

データの中身(一部)

x,y_train42個,42個とx,y_test18個,18個のデータです.

x_train [[ 5.04390949e-01 2.82111752e+00 -5.90021090e-01 ... 2.59547117e-01 0.00000000e+00 9.78655016e+00] [ 9.53502453e-03 1.34599070e+00 -1.89471101e+00 ... 9.78987226e-01 0.00000000e+00 9.73595706e+00] [ 1.37212890e-01 1.20518105e+00 -9.83268767e-01 ... 3.93301413e-01 0.00000000e+00 9.78349855e+00] ... [ 3.73374090e-01 1.31965421e+00 -1.34150079e+00 ... 9.23270503e-01 0.00000000e+00 9.89672438e+00] [ 9.91152646e-01 1.51178849e+00 2.04255183e-01 ... 1.78536129e-01 0.00000000e+00 1.01428930e+01] [ 9.12770779e-01 1.96324551e+00 -6.52419220e-02 ... 5.50420941e-01 0.00000000e+00 9.84790721e+00]] y_test [[0. 0. 0. 0. 1.] [0. 0. 1. 0. 0.] [0. 0. 0. 0. 1.] [0. 1. 0. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 1. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 1. 0. 0.] [0. 1. 0. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 1. 0. 0.] [0. 0. 0. 1. 0.] [0. 0. 0. 1. 0.] [0. 1. 0. 0. 0.] [0. 0. 0. 1. 0.] [0. 1. 0. 0. 0.] [0. 0. 0. 0. 1.] [0. 0. 0. 0. 1.]]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jbpb0

2022/05/16 22:20

x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.3,random_state=3) のすぐ下に print(x_train.shape) を追加して実行したら、何て表示されますでしょうか?
proad

2022/05/17 00:44

print(x_train.shape)を実行したところ (42, 28)と出力されました.
jbpb0

2022/05/17 02:38 編集

> print(x_train.shape)を実行したところ (42, 28)と出力されました. その「42」と「28」は、それぞれデータの何に付いての数値でしょうか? 一つのサンプルに28の数値(特徴量)があって、それが42サンプルある、ということでしょうか? 【追記】 > x,y_train42個,42個とx,y_test18個,18個のデータです. と書かれてるのを見落としてました 「42」がサンプル数だとすると、一つのサンプルは28個の数値からなる1次元のデータでしょうか? もしそうなら、「Conv3D」は3次元入力が必要なので、1次元入力には使えません https://keras.io/ja/layers/convolutional/ の「Conv3D」を見てください
jbpb0

2022/05/17 02:48 編集

> Input 0 of layer sequential is incompatible with the layer の原因は、 > print(x_train.shape)を実行したところ (42, 28)と出力されました. と、 model.add(Conv3D(32, kernel_size=(5, 5, 5),input_shape=(64, 64, 64, 1), data_format='channels_last')) の「input_shape=(64, 64, 64, 1)」が矛盾してるからです https://rightcode.co.jp/blog/information-technology/neural-network-learning-visualization#i-3 の「使用するデータセット」の「データセットのロード」を見ると、「x_train.shape」は「(60000, 28, 28, 1)」ですよね https://rightcode.co.jp/blog/information-technology/neural-network-learning-visualization#MNIST の「MNISTを画像分類するモデルを構築する」を見ると、「input_shape=(28, 28, 1)」ですよね 上記のように、「input_shape」は「x_train.shape」から先頭の数値(上記例では「60000」)のみ無いものと一致しないといけません なお、「x_train.shape」の先頭の数値(上記例では「60000」)は、学習データのサンプル数です 上記Webページの例では、「x_train」には画像が60000枚入ってます > x,y_train42個,42個とx,y_test18個,18個のデータです. ならば、質問者さんの場合は、その数値はたぶん「42」
proad

2022/05/17 02:58

1つのサンプルは28個からなる1次元データです. Conv3Dが使えないということなのでConv1でモデルを作成してみます. コメントを下さりありがとうございます.
guest

回答1

0

ベストアンサー

Input 0 of layer sequential is incompatible with the layer

の原因は、

print(x_train.shape)を実行したところ
(42, 28)と出力されました.

と、

python

1model.add(Conv3D(32, kernel_size=(5, 5, 5),input_shape=(64, 64, 64, 1), data_format='channels_last'))

の「input_shape=(64, 64, 64, 1)」が矛盾してるからです

 
ニューラルネットワークの学習過程を可視化してみよう
の「使用するデータセット」の「データセットのロード」を見ると、「x_train.shape」は「(60000, 28, 28, 1)」ですよね

ニューラルネットワークの学習過程を可視化してみよう
の「MNISTを画像分類するモデルを構築する」を見ると、「input_shape=(28, 28, 1)」ですよね

上記のように、「input_shape」は「x_train.shape」から先頭の数値(上記例では「60000」)のみ無いものと一致しないといけません

投稿2022/05/17 05:50

jbpb0

総合スコア7651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問