【发布时间】:2020-07-24 13:40:27
【问题描述】:
所以我正在尝试制作一个 CNN 来对 COVID19 推文进行情绪分析。我已经制作了一个基本的 CNN,它应该从每条推文的前 1000 个字数向量中进行训练,这些向量被标记为正面或负面。
变量的形状
features.shape : (100000, 1000)
labels.shape : (100000,)
型号
model = Sequential()
model.add(Conv1D(input_shape=(100000,1000),filters=64,kernel_size=(3),padding="same", activation="relu",))
model.add(Conv1D(filters=64,kernel_size=(3),padding="same", activation="relu"))
model.add(MaxPool1D(pool_size=(2),strides=(2)))
model.add(Conv1D(filters=128, kernel_size=(3), padding="same", activation="relu"))
model.add(Conv1D(filters=128, kernel_size=(3), padding="same", activation="relu"))
model.add(MaxPool1D(pool_size=(2),strides=(2)))
model.add(Conv1D(filters=256, kernel_size=(3), padding="same", activation="relu"))
model.add(Conv1D(filters=256, kernel_size=(3), padding="same", activation="relu"))
model.add(MaxPool1D(pool_size=(2),strides=(2)))
model.add(Flatten())
model.add(Dense(units=512,activation="relu"))
model.add(Dense(units=512,activation="relu"))
model.add(Dense(units=2, activation="softmax"))
model.compile(optimizer='nadam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
checkpoint = ModelCheckpoint('model.h5', monitor='loss', verbose=0,
save_best_only=True, mode='auto', save_freq=1)
现在,模型编译得很好,我认为输入形状也符合文档,即(元素数量,每个元素的长度)。
当我尝试运行 .fit() 函数时出现问题。
hist=model.fit(features, labels, epochs=1000, batch_size=100, callbacks=[checkpoint])
我明白了……
值错误
Epoch 1/1000
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-49-be37a193e07d> in <module>()
----> 1 hist=model.fit(features, labels, epochs=1000, batch_size=100, callbacks=[checkpoint])
10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
966 except Exception as e: # pylint:disable=broad-except
967 if hasattr(e, "ag_error_metadata"):
--> 968 raise e.ag_error_metadata.to_exception(e)
969 else:
970 raise
ValueError: in user code:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:571 train_function *
outputs = self.distribute_strategy.run(
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run **
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:531 train_step **
y_pred = self(x, training=True)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:886 __call__
self.name)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/input_spec.py:180 assert_input_compatibility
str(x.shape.as_list()))
ValueError: Input 0 of layer sequential_6 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [100, 1000]
我试图做出不同的变化,我认为这可能是问题,但没有运气。我在 Conv2D 中没有遇到任何问题,它只是将单个元素的形状作为 input_size 以及 .fit() 方法中的整个特征和标签数组。所以,除了我已经给出的不同的 input_size 格式之外,这里还需要对 Conv1D 做些什么。
【问题讨论】:
标签: python deep-learning tf.keras