#python #tensorflow #machine-learning #keras #neural-network
Вопрос:
Я новичок в Нью — Йорке. Кто-нибудь может помочь мне выяснить ошибку этого кода?
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)
Комментарии:
1. Вы передаете данные с 71 объектом (
X=[:,0:71]
), в то время как в ваших входных объектах первых слоев указано 8 (input_dim=8
). Измените значение входного сигнала dim наinput_dim=71
.2. Кроме того, если ваш последний слой имеет 1 вывод в двоичном виде, то последнее измерение
Y
также должно быть 1. В противном случае вы получите еще одну ошибку. Подводя итог: форма X должна быть такой (n_samples, n_features) и форма Y (n_samples, 1).3. Спасибо @Kaveh, теперь это работает. Не могли бы вы, пожалуйста, сказать мне, как получить средний балл? Я получаю точность для каждого сгиба.
4. Первый
scores = []
. затем в складку для петлиscores.append(model.evaluate)
, затем снаружи для петлиnp.mean(scores)
5. как я могу нарисовать кривую ROC и кривую PR для этого примера?
Ответ №1:
Из комментариев
Вы передаете данные с
71
объектами(X=[:,0:71])
, в то время как вы указали в своих первых слоях входные объекты как8 (input_dim=8)
. Измените значение входного сигнала dim наinput_dim=71
.Если ваш последний слой
1
выводится в двоичном виде, то последнее измерение Y также должно быть1
.(Перефразировано из Кавеха)