Keras 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

当我为多通道顺序数据实现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 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()中,参数指的是“小批量”。