python - 向 Keras 顺序模型添加手工制作的功能

标签 python tensorflow machine-learning deep-learning keras

我有一个一维序列,我想将其用作 Keras VGG 分类模型的输入,分为 x_trainx_test。对于每个序列,我还在 feats_trainfeats_test 中存储了自定义功能,我不想将其输入到卷积层,而是输入到第一个完全连接的层。

因此,训练或测试的完整样本将由一维序列和 n 个浮点特征组成。

首先将自定义特征提供给全连接层的最佳方式是什么?我考虑过将输入序列和自定义特征连接起来,但我不知道如何在模型中将它们分开。还有其他选择吗?

没有自定义功能的代码:

x_train, x_test, y_train, y_test, feats_train, feats_test = load_balanced_datasets()

model = Sequential()
model.add(Conv1D(10, 5, activation='relu', input_shape=(timesteps, 1)))
model.add(Conv1D(10, 5, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.5, seed=789))

model.add(Conv1D(5, 6, activation='relu'))
model.add(Conv1D(5, 6, activation='relu'))
model.add(MaxPooling1D(pool_size=2))
model.add(Dropout(0.5, seed=789))

model.add(Flatten())

model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5, seed=789))
model.add(Dense(2, activation='softmax'))

model.compile(loss='logcosh', optimizer='adam', metrics=['accuracy'])

model.fit(x_train, y_train, batch_size=batch_size, epochs=20, shuffle=False, verbose=1)

y_pred = model.predict(x_test)

最佳答案

Sequential 模型不是很灵活。你应该看看 functional API .

我会尝试这样的事情:

from keras.layers import (Conv1D, MaxPool1D, Dropout, Flatten, Dense,
                          Input, concatenate)
from keras.models import Model, Sequential

timesteps = 50
n = 5

def network():
    sequence = Input(shape=(timesteps, 1), name='Sequence')
    features = Input(shape=(n,), name='Features')

    conv = Sequential()
    conv.add(Conv1D(10, 5, activation='relu', input_shape=(timesteps, 1)))
    conv.add(Conv1D(10, 5, activation='relu'))
    conv.add(MaxPool1D(2))
    conv.add(Dropout(0.5, seed=789))

    conv.add(Conv1D(5, 6, activation='relu'))
    conv.add(Conv1D(5, 6, activation='relu'))
    conv.add(MaxPool1D(2))
    conv.add(Dropout(0.5, seed=789))
    conv.add(Flatten())
    part1 = conv(sequence)

    merged = concatenate([part1, features])

    final = Dense(512, activation='relu')(merged)
    final = Dropout(0.5, seed=789)(final)
    final = Dense(2, activation='softmax')(final)

    model = Model(inputs=[sequence, features], outputs=[final])

    model.compile(loss='logcosh', optimizer='adam', metrics=['accuracy'])

    return model

m = network()

关于python - 向 Keras 顺序模型添加手工制作的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48827687/

相关文章:

python - Python 3 中的 __metaclass__

python - 如何解决值错误: Columns must be same length as key?

python - 从 HDFS、TFRecordDataset+num_parallel_read 等远程主机读取时哪个更好?或 parallel_interleave

algorithm - 测量执行任何功能的预期时间

machine-learning - 训练过程中出现Nans的常见原因

python - biopython 有没有办法从发表的文章中获取完整的摘要?

python - 如何根据 pyplot 极坐标图的平均值为其着色

python - Tensorflow 对象检测 API : output boxes for probability less than 50%

javascript - 如何在不初始化权重的情况下导入经过训练的模型

python - 从 Dask Dataframe 中获取一行而不将整个 Dataframe 加载到内存中