【问题标题】: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: 检查模型目标时出错:预期dense_21 具有形状 (None, 1) 但得到的数组具有形状 (1708, 66)
【发布时间】:2017-04-04 13:47:58
【问题描述】:

这是我正在处理的代码:

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)

【问题讨论】:

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


    【解决方案1】:

    更改以下代码行:

    model.add(Dense(66, activation='softmax'))
    

    和:

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

    问题在于你想预测一个char,它被编码为长度为66的one-hot向量。在这种情况下,你将输出设置为所需的长度,并且你正在使用categorical_crossentropy loss和softmax 激活。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      相关资源
      最近更新 更多