Model.fit() ValueError: Error when checking model target: expected dense_21 to have shape (None, 1) but got array with shape (1708, 66)
Model.fit() ValueError: Error when checking model target: expected dense_21 to have shape (None, 1) but got array with shape (1708, 66)
这是我正在处理的代码:
from __future__ import print_function
from keras.models import Sequential
from keras.layers import Dense
from sklearn.cross_validation import train_test_split
import numpy
numpy.random.seed(7)
data_pixels=np.genfromtxt("pixels_dataset.csv", delimiter=',')
classes_dataset=np.genfromtxt("labels.csv",dtype=np.str , delimiter='\t')
x_train, x_test, y_train, y_test = train_test_split(data_pixels, classes_dataset, test_size=0.3
x_train
的形状为 (1708, 3072)
array([[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 1., 1., 1.],
[ 1., 1., 1., ..., 1., 1., 1.],
...,
[ 0., 0., 0., ..., 1., 1., 1.],
[ 1., 1., 1., ..., 1., 1., 1.],
[ 0., 0., 0., ..., 1., 1., 1.]])
y_train
的形状为 (1708,)
array(['7', 'f', '3', ..., '6', 'o', 'O'],
dtype='|S5')
y_train的字符是
: , : ; ! è à ä Aa..Zz 0-9
model = Sequential()
model.add(Dense(12, input_dim=3072, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
我在执行以下命令后出现错误:
model.fit(x_train,y_train, epochs=150, batch_size=10)
错误是
ValueError: could not convert string to float: A
我尝试了以下替代方案:
1)
x_train=n.array(x_train)
y_train=n.array(y_train)
2)
model.fit(x_train,str(y_train), epochs=150, batch_size=10)
但是我得到了同样的错误
然后我尝试了另一种选择
from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
y_train = encoder.fit_transform(y_train)
然后我得到一个新的错误是
ValueError: Error when checking model target: expected dense_21 to have shape (None, 1) but got array with shape (1708, 66)
更改以下代码行:
model.add(Dense(66, activation='softmax'))
和:
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
问题在于您想要预测一个 char
,它被编码为 one-hot
长度为 66 的向量。在这种情况下 - 您将输出设置为所需的长度,并且您正在使用 categorical_crossentropy
损失和 softmax
激活。
这是我正在处理的代码:
from __future__ import print_function
from keras.models import Sequential
from keras.layers import Dense
from sklearn.cross_validation import train_test_split
import numpy
numpy.random.seed(7)
data_pixels=np.genfromtxt("pixels_dataset.csv", delimiter=',')
classes_dataset=np.genfromtxt("labels.csv",dtype=np.str , delimiter='\t')
x_train, x_test, y_train, y_test = train_test_split(data_pixels, classes_dataset, test_size=0.3
x_train
的形状为 (1708, 3072)
array([[ 0., 0., 0., ..., 0., 0., 0.],
[ 0., 0., 0., ..., 1., 1., 1.],
[ 1., 1., 1., ..., 1., 1., 1.],
...,
[ 0., 0., 0., ..., 1., 1., 1.],
[ 1., 1., 1., ..., 1., 1., 1.],
[ 0., 0., 0., ..., 1., 1., 1.]])
y_train
的形状为 (1708,)
array(['7', 'f', '3', ..., '6', 'o', 'O'],
dtype='|S5')
y_train的字符是
: , : ; ! è à ä Aa..Zz 0-9
model = Sequential()
model.add(Dense(12, input_dim=3072, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
我在执行以下命令后出现错误:
model.fit(x_train,y_train, epochs=150, batch_size=10)
错误是
ValueError: could not convert string to float: A
我尝试了以下替代方案: 1)
x_train=n.array(x_train)
y_train=n.array(y_train)
2)
model.fit(x_train,str(y_train), epochs=150, batch_size=10)
但是我得到了同样的错误 然后我尝试了另一种选择
from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
y_train = encoder.fit_transform(y_train)
然后我得到一个新的错误是
ValueError: Error when checking model target: expected dense_21 to have shape (None, 1) but got array with shape (1708, 66)
更改以下代码行:
model.add(Dense(66, activation='softmax'))
和:
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
问题在于您想要预测一个 char
,它被编码为 one-hot
长度为 66 的向量。在这种情况下 - 您将输出设置为所需的长度,并且您正在使用 categorical_crossentropy
损失和 softmax
激活。