【问题标题】:Input 0 of layer sequential is incompatible with the layer: expected axis -1 of input shape to have value 8 but received input with shape (None, 71)层顺序的输入 0 与层不兼容:输入形状的预期轴 -1 具有值 8,但接收到的输入具有形状(无,71)
【发布时间】:2021-11-29 09:55:39
【问题描述】:

我是 NN 的新手。谁能帮我找出这段代码的错误?

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.losses import sparse_categorical_crossentropy
from tensorflow.keras.optimizers import Adam
from sklearn.model_selection import KFold
from numpy import loadtxt
import numpy as np
import pandas as pd

from google.colab import files
uploaded = files.upload()

dataset = loadtxt('mod_dfn.csv', delimiter=',')

X = dataset[:,0:71]
y = dataset[:,71]

kfold = KFold(n_splits=10, shuffle=True)

fold_no = 1
for train, test in kfold.split(X, y):

  model = Sequential()
  model.add(Dense(12, input_dim=8, activation='relu'))
  model.add(Dense(8, activation='relu'))
  model.add(Dense(1, activation='sigmoid'))

  model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

  print('------------------------------------------------------------------------')
  print(f'Training for fold {fold_no} ...')

  history = model.fit(X[train], y[train], batch_size=10, epochs=150, verbose=0)

  scores = model.evaluate(X[test], y[test], verbose=0)
  print(f'Score for fold {fold_no}: {model.metrics_names[0]} of {scores[0]}; {model.metrics_names[1]} of {scores[1]*100}%')
  acc_per_fold.append(scores[1] * 100)
  loss_per_fold.append(scores[0])

  fold_no = fold_no + 1

我收到了这个错误

------------------------------------------------------------------------
Training for fold 1 ...
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-16-4ad6d644594b> in <module>()
     17 
     18   # Fit data to model
---> 19   history = model.fit(X[train], y[train], batch_size=10, epochs=150, verbose=0)
     20 
     21   # Generate generalization metrics

9 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: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 sequential is incompatible with the layer: expected axis -1 of input shape to have value 8 but received input with shape (None, 71)

【问题讨论】:

  • 您传递的数据包含 71 个特征 (X=[:,0:71]),而您在第一层中将输入特征指定为 8 (input_dim=8)。将输入暗淡更改为input_dim=71
  • 另外,如果你的最后一层有1个二进制输出,那么Y的最后一个维度也应该是1。否则你会得到另一个错误。总结一下:X 形状应该是 (n_samples, n_features) 和 Y 形状 (n_samples, 1)。
  • 谢谢@Kaveh,现在它可以工作了。你能告诉我如何获得平均分吗?我得到了每次折叠的准确性。
  • 第一个scores = []。然后在折叠 for 循环 scores.append(model.evaluate) 然后在外面 for 循环 np.mean(scores)
  • 这个例子如何绘制ROC曲线和PR曲线?

标签: python tensorflow machine-learning keras neural-network


【解决方案1】:

来自 cmets

您正在传递具有71 特征(X=[:,0:71]) 的数据,而您 在您的第一层输入特征中指定为8 (input_dim=8)。将输入暗淡更改为input_dim=71

如果你的最后一层有1作为二进制输出,那么最后一维 Y 也应该是1

(转述自 Kaveh)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多