Проблема при попытке нарисовать кривую обучения - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь нарисовать кривую обучения для небольшого набора данных Полный код здесь

from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import Adam
import keras.backend as K
K.clear_session()

model = Sequential()
model.add(Dense(1, input_shape=(1,)))
model.compile(Adam(lr=0.2), "mean_squared_error")
model.fit(x,y,epochs=50)

iw = model.get_weights()
from keras.utils import to_categorical
yc= to_categorical(y)

from sklearn.model_selection import train_test_split
xtr, xts, ytr, yts = train_test_split(x,yc, test_size=0.3)
train_sizes = (len(xtr) * np.linspace(0.1, 0.99999999, 4)).astype(int)
test_scores = []
for i in train_sizes :
    xtrfr, _, yrtfr, _ = train_test_split(xtr,ytr,train_size=i)
    model.set_weights(iw)
    res = model.fit(xtrfr, yrtfr, epochs=600)
    e = model.evaluate(xts,yts)
    test_scores.append(e[-1])

plt.plot(train_sizes, test_scores, label="Learning Curve")
plt.legend()
plt.show()

, но я получаю эту ошибку

ValueError: Error when checking target: expected dense_1 to have shape (1,) but got array with shape (270,)

Я предполагаю, что с to_categorical что-то не так, но я не могу понять ":)

1 Ответ

0 голосов
/ 27 марта 2020

, глядя на формы ваших x и y, показывает, что они являются одномерным массивом:

>>> x.shape
(10000,)
>>> y.shape
(10000,)

однако ваша модель ожидает массив с input_shape=(1,), поэтому сначала вам придется изменить данные вот так:

>>> x = np.array(x, np.float32).reshape((-1, 1))
>>> y = np.array(y, np.float32).reshape((-1, 1))

теперь они будут иметь такую ​​форму:

>>> x.shape
(10000, 1)
>>> y.shape
(10000, 1)
>>> x

и будут выглядеть так:

>>> x
array([[73.847015],
       [68.781906],
       [74.11011 ],
       ...,
       [63.867992],
       [69.03424 ],
       [61.944244]], dtype=float32)
>>> y
array([[241.89357],
       [162.31047],
       [212.74086],
       ...,
       [128.47531],
       [163.85246],
       [113.6491 ]], dtype=float32)

массив с массивом, который имеет только один элемент

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...