Keras Conv1D和批量大小问题
当我为多通道顺序数据实现1D convnet时,我面临两个问题。 (224个样本x 300个时序x 19个通道) 1) 我将batch_大小设置为7,但它会随之跳跃5倍。 不是7142128而是7156105147。。。我的怎么了 2) 当我查看准确度记录时,似乎什么也没学到。 用Conv1D实现多通道顺序数据分类器是不可能的吗? 如果可能的话,你能从我的代码中给我一些建议吗Keras Conv1D和批量大小问题,keras,Keras,当我为多通道顺序数据实现1D convnet时,我面临两个问题。 (224个样本x 300个时序x 19个通道) 1) 我将batch_大小设置为7,但它会随之跳跃5倍。 不是7142128而是7156105147。。。我的怎么了 2) 当我查看准确度记录时,似乎什么也没学到。 用Conv1D实现多通道顺序数据分类器是不可能的吗? 如果可能的话,你能从我的代码中给我一些建议吗 #result x_train shape: (224, 300, 19) 224 train samples 28 t
#result
x_train shape: (224, 300, 19)
224 train samples
28 test samples
Train on 224 samples, validate on 28 samples
Epoch 1/50
7/224 [..............................] - ETA: 68s - loss: 0.6945 - acc: 0.5714
56/224 [======>.......................] - ETA: 6s - loss: 0.6993 - acc: 0.4464
105/224 [=============>................] - ETA: 2s - loss: 0.6979 - acc: 0.4381
147/224 [==================>...........] - ETA: 1s - loss: 0.6968 - acc: 0.4422
189/224 [========================>.....] - ETA: 0s - loss: 0.6953 - acc: 0.4444
224/224 [==============================] - 2s - loss: 0.6953 - acc: 0.4420 - val_loss: 0.6956 - val_acc: 0.5000
Epoch 2/50
7/224 [..............................] - ETA: 0s - loss: 0.6759 - acc: 0.5714
63/224 [=======>......................] - ETA: 0s - loss: 0.6924 - acc: 0.5556
133/224 [================>.............] - ETA: 0s - loss: 0.6905 - acc: 0.5338
203/224 [==========================>...] - ETA: 0s - loss: 0.6903 - acc: 0.5567
224/224 [==============================] - 0s - loss: 0.6923 - acc: 0.5357 - val_loss: 0.6968 - val_acc: 0.5000
# code
from __future__ import print_function
import keras
from keras.models import Sequential
from keras.layers import Dense, Dropout, Flatten, Activation
from keras.layers import Conv2D, MaxPooling2D, Conv1D, MaxPooling1D
import numpy as np
batch_size = 7
num_classes = 2
epochs = 50
# input data dimensions : 300 sequential x 19 channels
eeg_rows, num_ch = 300, 19
x_train = np.load('eeg_train.npy')
y_train = np.load('label_train.npy')
x_test = np.load('eeg_test.npy')
y_test = np.load('label_test.npy')
x_valid = np.load('eeg_valid.npy')
y_valid = np.load('label_valid.npy')
x_train = x_train.reshape(x_train.shape[0], eeg_rows, num_ch)
x_test = x_test.reshape(x_test.shape[0], eeg_rows,num_ch)
x_valid = x_valid.reshape(x_valid.shape[0], eeg_rows, num_ch)
input_shape = (eeg_rows, num_ch)
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_valid = x_test.astype('float32')
x_train /= 100
x_test /= 100
x_valid /= 100
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
# model
conv = Sequential()
conv.add(Conv1D(32, 3, input_shape=input_shape, activation='relu', padding='same'))
conv.add(Conv1D(32, 3, activation='relu', padding='same'))
conv.add(MaxPooling1D(pool_size=2, strides=2, padding='same'))
conv.add(Dropout(0.2))
conv.add(Flatten())
conv.add(Dense(16, activation='relu'))
conv.add(Dropout(0.5))
conv.add(Dense(2, activation='softmax'))
conv.compile(loss='categorical_crossentropy',
optimizer=keras.optimizers.Adam(),
metrics=['accuracy'])
# train
conv.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs,
verbose=1,
validation_data=(x_valid, y_valid))
score = conv.evaluate(x_valid, y_valid, verbose=0)
print(conv.summary())
print(conv.input_shape)
print(conv.output_shape)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
我不确定这一点,但我来这里是因为对Keras的“批量大小”术语有些混淆。我知道在.fit()方法中,可以将批大小设置为整数。但是,我注意到在.fit()方法的x参数中,Conv1D所需的数据形状是(批大小、步骤、输入大小)。这让我觉得有两种不同的“批量大小”。如果您传递一个(7,步骤数,输入维度)形状的数组,并在.fit()方法中指定一个“batch\u size”参数7,那么可能每次都添加7*7=49,因此您会看到7、56、105。确切地说,我认为在(batch\u size,steps,input\u dims)的上下文中,“batch\u size”指的是整个数据集,而“batch\u size”指的是整个数据集在.fit()中,参数指的是“小批量”。我不确定这一点,但我来到这里是因为对Keras的“批量大小”术语有些混淆。我知道在.fit()方法中,可以将批大小设置为整数。但是,我注意到在.fit()方法的x参数中,Conv1D所需的数据形状是(批大小、步骤、输入大小)。这让我觉得有两种不同的“批量大小”。如果您传递一个(7,步骤数,输入维度)形状的数组,并在.fit()方法中指定一个“batch\u size”参数7,那么可能每次都添加7*7=49,因此您会看到7、56、105。确切地说,我认为在(batch\u size,steps,input\u dims)的上下文中,“batch\u size”指的是整个数据集,而“batch\u size”指的是整个数据集在.fit()中,参数指的是“小批量”。