我正在尝试在文本输入上运行神经网络。这是一个二进制分类。到目前为止,这是我的工作代码:
df = pd.read_csv(pathname, encoding = "ISO-8859-1")
df = df[['content_cleaned', 'meaningful']] #Content cleaned: text, meaningful: label
X = df['content_cleaned']
y = df['meaningful']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=21)
tokenizer = Tokenizer(num_words=100)
tokenizer.fit_on_texts(X_train)
X_train_encoded = tokenizer.texts_to_sequences(X_train)
X_test_encoded = tokenizer.texts_to_sequences(X_test)
max_len = 100
X_train = pad_sequences(X_train_encoded, maxlen=max_len)
X_test = pad_sequences(X_test_encoded, maxlen=max_len)
batch_size = 100
max_words = 100
input_dim = X_train.shape[1] # Number of features
model = Sequential()
model.add(layers.Dense(10, activation='relu', input_shape=X_train.shape[1:]))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
history = model.fit(X_train, X_test,
batch_size=batch_size,
epochs=5,
verbose=1,
validation_split=0.1)
我的问题分为两个部分。首先是创建图层时的input_shape
。我对声明这一点的语法感到困惑。运行此命令时:
print(X_train.shape)
我的形状是:(3609, 100)
。
据我了解,这告诉我有3609个实例。从查看其他示例来看,我幼稚的假设是使用100,因为与我初始化的max_words
相对应的类型有100种(可能理解不正确)。我相信初始化input_shape
时可能语法错误。
第二个问题是在运行所有这些时出现一条错误消息(很可能带有错误的input_shape
)。错误消息突出显示了以下代码行:
validation_split=0.1)
错误消息是:
ValueError: Error when checking target: expected dense_2 to have shape (None, 1) but got array with shape (1547, 1
我会错误地处理此问题吗?我是深度学习的新手。
答案 0 :(得分:1)
input_shape
参数指定一个训练样本的形状。因此,您需要将其设置为X_train.shape[1:]
(即忽略样品或批处理轴):
model.add(layers.Dense(10, activation='relu', input_shape=X_train.shape[1:]))
进一步,将X_train
和y_train
传递到fit_generator
(而不是X_train_encoded
和X_test_encoded
)。
答案 1 :(得分:0)
在定义模型输入的那一行中,您错过了两个结束括号)
。另外,请确保您提供了激活功能。
按如下所示更改代码:
model.add(layers.Dense(10, activation='relu', input_shape=(X_train.shape[0],)))
编辑:
对于上一个错误,只需将input_shape
更改为input_shape=(X_train.shape[0],)
。