我正在使用CNN进行假新闻检测,我对在keras和tensorflow中编码CNN是个新手。我需要关于创建CNN的帮助,该CNN将输入作为语句的形式,每个向量的长度为100,输出0或1取决于其预测值为false或true。
X_train.shape
# 10229, 100
X_train = np.expand_dims(X_train, axis=2)
X_train.shape
# 10229,100,1
# actual cnn model here
import tensorflow as tf
from tensorflow.keras import layers
# Conv1D + global max pooling
from keras.layers import Conv1D, MaxPooling1D, Embedding, Dropout, Flatten, Dense
from keras.layers import Input
text_len=100
from keras.models import Model
inp = Input(batch_shape=(None, text_len, 1))
conv2 = Conv1D(filters=128, kernel_size=5, activation='relu')(inp)
drop21 = Dropout(0.5)(conv2)
conv22 = Conv1D(filters=64, kernel_size=5, activation='relu')(drop21)
drop22 = Dropout(0.5)(conv22)
pool2 = MaxPooling1D(pool_size=2)(drop22)
flat2 = Flatten()(pool2)
out = Dense(1, activation='softmax')(flat2)
model = Model(inp, out)
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(X_train, Y_train)如果有人能给我一点解释的工作代码,我将不胜感激
发布于 2020-06-20 02:39:01
在这个虚拟示例中,我使用了一个具有2D特性的Conv1D。Conv1D接受3D格式(n_samples、time_steps、features)的输入序列。如果您正在使用2D功能,则必须将其调整为3D功能。通常的选择是考虑你的特征,简单地扩展时间维度(轴1上的expand_dims),没有理由假设tfidf/one-hot特征的位置/时间模式。
当你建立你的神经网络时,你从3D维度开始,你必须通过2D。从3D过渡到2D有很多可能性,简单的帖子是扁平化的,1个时间暗淡的池化层是无用的。如果您使用softmax作为最后一个激活层,请记住将一个维度传递给您的密集层,该维度等于您的类数
import numpy as np
import tensorflow as tf
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
## define variable
n_sample = 10229
text_len = 100
## create dummy data
X_train = np.random.uniform(0,1, (n_sample,text_len))
y_train = np.random.randint(0,2, n_sample)
## expand train dimnesion: pass from 2d to 3d
X_train = np.expand_dims(X_train, axis=1)
print(X_train.shape, y_train.shape)
## create model
inp = Input(shape=(1,text_len))
conv2 = Conv1D(filters=128, kernel_size=5, activation='relu', padding='same')(inp)
drop21 = Dropout(0.5)(conv2)
conv22 = Conv1D(filters=64, kernel_size=5, activation='relu', padding='same')(drop21)
drop22 = Dropout(0.5)(conv22)
pool2 = Flatten()(drop22) # this is an option to pass from 3d to 2d
out = Dense(2, activation='softmax')(pool2) # the output dim must be equal to the num of class if u use softmax
model = Model(inp, out)
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
model.fit(X_train, y_train, epochs=5)https://stackoverflow.com/questions/62475807
复制相似问题