【发布时间】:2022-01-18 09:18:34
【问题描述】:
我正在研究使用质谱数据来构建 CNN 模型。我有 5 个不同的类,每个数据集有 2300 个读数。我确实需要一些帮助来检查我所做的是否正确以及方向是否正确!我附上了一张关于数据在 excel 上的样子的图片。 [excel数据:https://i.stack.imgur.com/b6Zot.png] 代码中添加了一些问题作为cmets,如果有人可以帮忙解释一下!
导入库和数据集
import numpy as np
import pandas as pd
import tensorflow as tf
dataset = pd.read_csv('CAP.data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
print(X.shape)
print(y.shape)
拆分训练和测试集
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)
import keras
from keras.layers import Conv1D
from keras.layers import Dense, Activation, Flatten, Conv1D, Dropout, BatchNormalization, MaxPooling1D, LeakyReLU
ms_input_shape = (2300,3) #Could someone suggest how I should set the input shape to be?
model = keras.models.Sequential()
model.add(Conv1D(filters=6, kernel_size=21, strides=1, padding='same', activation='relu', input_shape= ms_input_shape,kernel_initializer=keras.initializers.he_normal()))
model.add(BatchNormalization()) #what is the purpose of this!
model.add(MaxPooling1D(pool_size=2, strides=2, padding='same'))
model.add(Conv1D(filters=16, kernel_size=5, strides=1, padding='same',activation='relu'))
model.add(BatchNormalization())
model.add(MaxPooling1D(pool_size=2, strides=2, padding='same'))
model.add(Flatten())
model.add(Dense(120, activation='relu'))
model.add(Dense(84))
model.add(Dense(5, activation='softmax'))
model.summary()
结果:
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv1d (Conv1D) (None, 2300, 6) 384
batch_normalization (BatchN (None, 2300, 6) 24
ormalization)
max_pooling1d (MaxPooling1D (None, 1150, 6) 0
)
conv1d_1 (Conv1D) (None, 1150, 16) 496
batch_normalization_1 (Batc (None, 1150, 16) 64
hNormalization)
max_pooling1d_1 (MaxPooling (None, 575, 16) 0
1D)
flatten (Flatten) (None, 9200) 0
dense (Dense) (None, 120) 1104120
dense_1 (Dense) (None, 84) 10164
dense_2 (Dense) (None, 5) 425
=================================================================
Total params: 1,115,677
Trainable params: 1,115,633
Non-trainable params: 44
为什么有 44 个不可训练的参数?
model.compile(optimizer=tf.keras.optimizers.Adam(),loss='categorical_crossentropy',metrics=['acc'])
callbacks_list = [
keras.callbacks.ModelCheckpoint(
filepath='best_model.{epoch:02d}-{val_loss:.2f}.h5',
monitor='val_loss', save_best_only=True),
keras.callbacks.EarlyStopping(monitor='acc', patience=1)]
BATCH_SIZE = 32 #I am not sure what batch size should I set for my case?
EPOCHS = 20
history = model.fit(X_train,
y_train,
batch_size=BATCH_SIZE,
epochs=EPOCHS,
callbacks=callbacks_list,
validation_split=0.2,
verbose=1)
我在运行历史记录中遇到了这个错误
ValueError: Exception encountered when calling layer "sequential_2" (type Sequential).
Input 0 of layer "conv1d_4" is incompatible with the layer: expected min_ndim=3, found ndim=2. Full shape received: (None, 2300)
Call arguments received:• inputs=tf.Tensor(shape=(None, 2300), dtype=float32) • training=True • mask=None
有人可以建议吗?
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning