ValueError:层密度_10的输入0与层不兼容:输入形状的轴1的值应为256 bt rcwd shape(2,16256)

2024-04-19 11:16:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我在设置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()

Tags: runpyinputmodellibpackagesusrlocal