前提
kerasのFunctional APIにてcnnを作成しているときにエラーが起こりました
データの長さが498
データのチャンネル数は4つです。
実現したいこと
このエラーの原因が知りたいです。
発生している問題・エラーメッセージ
Traceback (most recent call last): File "/Users/****/code.py", line 90, in <module> inputs = Input(train_data) File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/keras/engine/input_layer.py", line 309, in Input input_layer = InputLayer(**input_layer_config) File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/keras/engine/input_layer.py", line 155, in __init__ input_tensor = backend.placeholder( File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/keras/backend.py", line 1246, in placeholder spec = tensor_spec.TensorSpec( File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/framework/tensor_spec.py", line 51, in __init__ self._shape = tensor_shape.TensorShape(shape) File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/framework/tensor_shape.py", line 758, in __init__ self._dims = [Dimension(d) for d in dims] File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/framework/tensor_shape.py", line 758, in <listcomp> self._dims = [Dimension(d) for d in dims] File "/opt/anaconda3/envs/emg/lib/python3.9/site-packages/tensorflow/python/framework/tensor_shape.py", line 201, in __init__ self._value = int(value.__index__()) TypeError: only integer scalar arrays can be converted to a scalar index
該当のソースコード
Python
1# import tensorflow as tf 2# physical_devices = tf.config.experimental.list_physical_devices('GPU') 3# if len(physical_devices) > 0: 4# for k in range(len(physical_devices)): 5# tf.config.experimental.set_memory_growth(physical_devices[k], True) 6# print('memory growth:', tf.config.experimental.get_memory_growth(physical_devices[k])) 7# else: 8# print("Not enough GPU hardware devices available") 9 10from re import X 11import numpy as np 12from keras.models import Sequential 13from keras.layers import Conv2D, MaxPool2D ,MaxPool1D, Conv1D 14from keras.layers import Activation, Dropout, Flatten, Dense 15from keras.layers import Input, Dense 16from keras import optimizers 17import matplotlib.pyplot as plt 18import csv 19import os 20import pandas as pd 21from keras.utils import np_utils 22from sklearn.model_selection import train_test_split 23from keras.callbacks import EarlyStopping 24from keras_self_attention import SeqSelfAttention 25from keras.models import Model 26 27np.random.seed(42) 28 29 30 31csv_file=os.listdir('/Users/〜') 32# print(csv_file) 33 34l=[] 35label_data=[] 36samples=len(csv_file) 37 38for x in range(len(csv_file)): 39 dataset=pd.read_csv('/Users/〜/'+str(csv_file[x]),engine='python') 40 # dataset=dataset.iloc[:,1:5] 41 dataset=dataset.iloc[:,1:9] 42 dataset=dataset.drop(dataset.columns[[1,4,6,7]], axis=1) #チャネル減少 43 Len=len(dataset)#データの長さ 44 label=str(csv_file[x]) 45 46 label_data.append(label[0]) 47 dataset=dataset.values.T #data.shape ==> (4, 498) 48 input_data=dataset 49 l.append(input_data.copy()) 50 51train_data=np.array(l) 52 53 54label_data = np_utils.to_categorical(label_data) 55label_data = np.delete(label_data, 0, axis=1) 56label_data=np.array(label_data) 57 58epochs=200 59batch_size=8 60 61#model 62# モデルの定義 63inputs = Input(train_data) 64#batch_size, steps, input_dim 65 66x=Conv1D(8,12,strides=1,activation='relu')(inputs) 67x=MaxPool1D(pool_size=2,strides=2)(x) 68x=Conv1D(64,3,strides=1,activation='relu')(x) 69x=MaxPool1D(pool_size=2,strides=2)(x) 70x=Conv1D(64,3,strides=1,activation='relu')(x) 71x=MaxPool1D(pool_size=2,strides=2)(x) 72x=Conv1D(64,3,strides=1,activation='relu')(x) 73x=MaxPool1D(pool_size=2,strides=2)(x) 74x=Conv1D(64,3,strides=1,activation='relu')(x) 75x=MaxPool1D(pool_size=2,strides=2)(x) 76 77 78x=Dropout(0.7)(x) 79 80x=Flatten()(x) 81x=Dense(2000)(X) 82x=Activation('relu')(x) 83 84x=Dropout(0.5)(x) 85x=Dense(8, activation='softmax')(x) 86 87 88model=Model(inputs,x) 89 90adam = optimizers.Adam(lr=0.0001) 91# sgd = optimizers.SGD(lr=0.01) 92 93model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=["accuracy"]) 94 95 96 97 98 99# history = model.fit(train_x, train_t, batch_size=batch_size, epochs=epochs, verbose=1) 100early_stopping_cb = EarlyStopping(monitor='val_loss', patience=10) 101#restore_best_weights=True 102#アーリーストッピングあり 103history = model.fit(train_data, label_data, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.2, shuffle=True , callbacks=[early_stopping_cb]) 104#なし 105# history = model.fit(train_data, label_data, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.2, shuffle=True ) 106model.summary() 107model.save('/Users/モデル') 108 109 110 111# plt.plot(history.history['loss'], label='loss') 112# plt.plot(history.history['val_loss'], label='val_loss') 113# plt.xlabel('epoch') 114# plt.ylabel('loss') 115# plt.legend() 116# plt.show() 117 118#loss 119plt.plot(history.history['loss']) 120plt.plot(history.history['val_loss']) 121plt.title('model loss') 122plt.ylabel('loss') 123plt.xlabel('epoch') 124plt.legend(['train', 'test'], loc='upper left') 125plt.show() 126 127#Accuracy 128plt.figure() 129plt.plot(history.history['accuracy']) 130plt.plot(history.history['val_accuracy']) 131plt.title('model accuracy') 132plt.ylabel('accuracy') 133plt.xlabel('epoch') 134plt.legend(['train', 'test'], loc='upper left') 135plt.show() 136
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください
(ここに書くのではなく、質問を編集して追記する)
ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
inputs = Input(train_data)
↓ 修正
inputs = Input(shape=train_data.shape[1:])
で、どうでしょうか?
以下解決
inputs = Input(shape=train_data.shape[1:])に変更したのち
dataset=dataset.values.T #data.shape ==> (4, 498)
から
dataset=dataset.valuesにすることで解決いたしました。

回答1件
あなたの回答
tips
プレビュー