python tensorflow keras

来源:互联网 发布:网络交友新时空原文 编辑:程序博客网 时间:2024/06/05 05:04

近期仍然在使用keras进行模型的设计和算法的实验,在使用过程中,发现Conv1D可以处理可变长度的序列输入,在使用Conv1D的过程中,和使用其他卷积层稍有不同,这里不仅在1维空间中用kernel来进行平面卷积,而且使用的一个概念很好,那就是基于序列的处理方法,也就是有一批要学习的数据,这一批中的数据,每一个样本都是一个序列,也就是(sequence_size,fea_size),同时,keras提供了对可变长度的数据进行处理。


1维卷积层的输入:input_shape用来制定当前每一个样本的序列长度以及特征维度,即(sequence_size, fea_size),与此同时,输入数据x_train也应该这个维度,只是还要多一维度,那就是有多少样本量。


同样要注意卷积的结果输出,到下一层的输入维度要匹配,同样的,其中有一点区别,那就是当不使用Flatten层来构建网络结构时,一定要时刻计算清楚每层的链接权重,keras中提供了查看网络结构的方法,当构建比较复杂的,无法搞清楚层与层之间的输入输出维度时,可以可视化网络结构图。


from keras.models import Sequentialfrom keras.layers import Dense, Dropoutfrom keras.layers import Embeddingfrom keras.layers import Conv1D, GlobalAveragePooling1D, MaxPooling1D, Flattenimport numpy as npfrom keras.losses import mean_absolute_errormodel = Sequential()model.add(Conv1D(64, 2, activation='relu', input_shape=(5, 10) ))model.add(Conv1D(64, 2, activation='relu'))model.add(MaxPooling1D(3))model.add(Conv1D(128, 3, activation='relu'))# model.add(Conv1D(128, 3, activation='relu'))# model.add(GlobalAveragePooling1D())model.add(Flatten())model.add(Dropout(0.5))model.add(Dense(1, activation='sigmoid'))model.compile(loss='mae',              optimizer='rmsprop',              metrics=['accuracy'])# from keras.utils.vis_utils import plot_model# plot_model(model, to_file='model.png')x_train = np.random.random((1000, 5, 10))y_train = np.random.randint(2, size = (1000, 1))model.fit(x_train, y_train, batch_size=16, epochs=10)x_test = np.random.random((100, 5, 10))y_test = np.random.randint(2, size = (100, 1))score = model.evaluate(x_test, y_test, batch_size=16)print(score)

原创粉丝点击