我在设置CNN1D模型输入的维度时遇到问题。 输入应该是一个形状为(12512)的数组,用于训练和测试is(2512)。稍后我会增加样本的大小,但现在我想设置运行。我在使用model.fit()函数时遇到问题
我尝试通过重塑(12512,1)来发送维度,但是我无法解决这个问题。我对输入形状的理解似乎很弱,因此任何帮助都将不胜感激
tf.Tensor([0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1.], shape=(12,), dtype=float32)
WARNING:tensorflow:Model was constructed with shape (None, 12, 1) for input KerasTensor(type_spec=TensorSpec(shape=(None, 12, 1), dtype=tf.float32, name='conv1d_13_input'), name='conv1d_13_input', description="created by layer 'conv1d_13_input'"), but it was called on an input with incompatible shape (2, 512, 1).
WARNING:tensorflow:Model was constructed with shape (None, 12, 1) for input KerasTensor(type_spec=TensorSpec(shape=(None, 12, 1), dtype=tf.float32, name='conv1d_13_input'), name='conv1d_13_input', description="created by layer 'conv1d_13_input'"), but it was called on an input with incompatible shape (2, 512, 1).
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-93-c8afced148ad> in <module>()
51
52 # run the experiment
---> 53 run_experiment()
11 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
992 except Exception as e: # pylint:disable=broad-except
993 if hasattr(e, "ag_error_metadata"):
--> 994 raise e.ag_error_metadata.to_exception(e)
995 else:
996 raise
ValueError: in user code:
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:853 train_function *
return step_function(self, iterator)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:842 step_function **
outputs = model.distribute_strategy.run(run_step, args=(data,))
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:1286 run
return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:2849 call_for_each_replica
return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.7/dist-packages/tensorflow/python/distribute/distribute_lib.py:3632 _call_for_each_replica
return fn(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:835 run_step **
outputs = model.train_step(data)
/usr/local/lib/python3.7/dist-packages/keras/engine/training.py:787 train_step
y_pred = self(x, training=True)
/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:1037 __call__
outputs = call_fn(inputs, *args, **kwargs)
/usr/local/lib/python3.7/dist-packages/keras/engine/sequential.py:369 call
return super(Sequential, self).call(inputs, training=training, mask=mask)
/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py:415 call
inputs, training=training, mask=mask)
/usr/local/lib/python3.7/dist-packages/keras/engine/functional.py:550 _run_internal_graph
outputs = node.layer(*args, **kwargs)
/usr/local/lib/python3.7/dist-packages/keras/engine/base_layer.py:1020 __call__
input_spec.assert_input_compatibility(self.input_spec, inputs, self.name)
/usr/local/lib/python3.7/dist-packages/keras/engine/input_spec.py:254 assert_input_compatibility
' but received input with shape ' + display_shape(x.shape))
ValueError: Input 0 of layer dense_10 is incompatible with the layer: expected axis -1 of input shape to have value 256 but received input with shape (2, 16256)
我的代码:
def evaluate_model(trainX, trainy, testX, testy):
verbose, epochs, batch_size = 0, 10, 2
#n_timesteps = len(trainX) #trainX.shape[0] #1
n_timesteps = trainX.shape[0] #1
n_features = 1# trainX.shape[2]
#n_outputs = len(trainy)#trainy.shape[0] #1
n_outputs = trainy.shape[0] #1
trainX = trainX.numpy()
trainX= trainX.reshape((trainX.shape[0], trainX.shape[1], n_features))
model = Sequential()
#model.add(Flatten(input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(n_timesteps,n_features)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# fit network
#np.asarray(trainX).astype('float32')
#np.asarray(trainy).astype('float32')
model.fit(trainX, trainy, epochs=epochs, batch_size=batch_size, verbose=verbose)
# evaluate model
_, accuracy = model.evaluate(testX, testy, batch_size=batch_size, verbose=0)
return accuracy
# summarize scores
def summarize_results(scores):
print(scores)
m, s = mean(scores), std(scores)
print('Accuracy: %.3f%% (+/-%.3f)' % (m, s))
# run an experiment
def run_experiment(repeats=10):
# load data
#trainX, trainy, testX, testy = load_dataset(train_dataset,test_dataset)
trainX, trainy, testX, testy = trainXtensor,trainytensor,testXtensor,testytensor
#trainX = np.expand_dims(trainX, axis=0)
print(trainy)
# repeat experiment
scores = list()
for r in range(repeats):
score = evaluate_model(trainX, trainy, testX, testy)
score = score * 100.0
print('>#%d: %.3f' % (r+1, score))
scores.append(score)
# summarize results
summarize_results(scores)
# run the experiment
run_experiment()
我知道出了什么问题。我看了这个例子来理解我做错了什么:https://www.datatechnotes.com/2020/02/classification-example-with-keras-cnn.html
我将n个时间步更改为512,将n个功能更改为1
512来自trainX.shape=(12512)
相关问题 更多 >
编程相关推荐