【发布时间】:2021-10-10 08:39:54
【问题描述】:
我正在尝试重新创建一篇论文中提到的卷积模型,但我遇到了一些问题。
这是我对 Python 和 Tf 的尝试:
X = df
y = dataset['attack_map']
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.30)
X_train = np.array(X_train)
X_test = np.array(X_test)
y_train = np.array(y_train)
y_test = np.array(y_test)
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
shape = (X_train.shape[1], X_train.shape[2])
## FIRST BLOCK
model1 = tf.keras.Sequential()
model1.add(tf.keras.layers.InputLayer(input_shape = shape))
model1.add(tf.keras.layers.Conv1D(filters = 32, kernel_size = 2, strides = 1))
model1.add(tf.keras.layers.Activation('relu'))
model1.add(tf.keras.layers.MaxPooling1D(pool_size = 2, strides = 1))
model1.add(tf.keras.layers.Flatten())
model1.add(tf.keras.layers.Dropout(.5))
## SECOND BLOCK
model2 = tf.keras.Sequential()
model2.add(tf.keras.layers.InputLayer(input_shape = shape))
model2.add(tf.keras.layers.Conv1D(filters = 32, kernel_size = 4, strides = 1))
model2.add(tf.keras.layers.Activation('relu'))
model2.add(tf.keras.layers.MaxPooling1D(pool_size = 4, strides = 1))
model2.add(tf.keras.layers.Flatten())
model2.add(tf.keras.layers.Dropout(.5))
## THIRD BLOCK
model3 = tf.keras.Sequential()
model3.add(tf.keras.layers.InputLayer(input_shape = shape))
model3.add(tf.keras.layers.Conv1D(filters = 32, kernel_size = 8, strides = 1))
model3.add(tf.keras.layers.Activation('relu'))
model3.add(tf.keras.layers.MaxPooling1D(pool_size = 8, strides = 1))
model3.add(tf.keras.layers.Flatten())
model3.add(tf.keras.layers.Dropout(.5))
model3.add(tf.keras.layers.Dense(256))
model3.add(tf.keras.layers.Dropout(.5))
model3.add(tf.keras.layers.Dense(5))
model3.add(tf.keras.layers.Softmax())
model = tf.keras.Sequential()
model.add(tf.keras.layers.Concatenate([model1, model2, model3]))
model.add(tf.keras.layers.Dense(5))
model.add(tf.keras.layers.Softmax())
model.compile(loss = 'sparse_categorical_crossentropy', optimizer = "adam", metrics = ['accuracy'])
callback = tf.keras.callbacks.EarlyStopping(monitor="val_loss", min_delta=0, patience=10, verbose=1, mode="auto", baseline=None, restore_best_weights=False),
start = time.perf_counter()
model.fit(X_train, y_train, epochs=EPOCHS, callbacks=[callback])
elapsed = time.perf_counter() - start
model.evaluate(X_test, y_test, verbose=2)
print('Elapsed %.3f seconds.' % elapsed)
我得到的错误是:
ValueError: A `Concatenate` layer should be called on a list of at least 2 inputs
所以想法是连接这些块。这可能是一个愚蠢的问题,但我最近一直在使用 tf。
有什么建议吗?谢谢
【问题讨论】:
标签: python python-3.x tensorflow machine-learning deep-learning