回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在这方面是个新手。这就是为什么,我可能不确定我应该写什么作为我的问题。我试图尽可能简单地表达我的问题。我正在显示我的部分代码</p>
<pre><code>print(data)
</code></pre>
<p>输出:</p>
<pre><code>array([[0, 0, 0, ..., 255, 255, 255],
[255, 255, 255, ..., 0, 0, 0],
[255, 255, 255, ..., 255, 255, 255],
...,
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255],
[255, 255, 255, ..., 255, 255, 255]], dtype=object)
</code></pre>
<h2></h2>
<pre><code>print(result)
</code></pre>
<p>输出:</p>
<pre><code>['Arrowhead' 'Arrowhead' 'Arrowhead' ... 'Vessel' 'Vessel' 'Vessel']
</code></pre>
<p>将标签转换为数字:</p>
<pre><code>LE = LabelEncoder()
target = LE.fit_transform(result)
print(target)
</code></pre>
<p>输出:</p>
<pre><code>[ 0 0 0 ... 38 38 38]
</code></pre>
<p>拆分:</p>
<pre><code>X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42, stratify=target)
</code></pre>
<p>我得到了一个错误:</p>
<pre><code>ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of groups for any class cannot be less than 2.
</code></pre>
<p>为了修复错误,我必须删除<code>stratify</code>,目前这可能还可以:</p>
<pre><code>X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=42)
</code></pre>
<p>为了建立一个CNN,我必须这样做:</p>
<pre><code>lb = preprocessing.LabelBinarizer()
y_train_categorical = lb.fit_transform(y_train)
y_test_categorical = lb.fit_transform(y_test)
print(y_train_categorical.shape)
print(y_test_categorical.shape)
</code></pre>
<p>输出:</p>
<pre><code>(1945, 38)
(487, 34)
</code></pre>
<p>问题就在这里。我需要y轴的相同值(<code>y_train_categorical.shape[1] & y_test_categorical.shape[1]</code>)。因为,我申请了:</p>
<pre><code>model = Sequential()
model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100,100,1)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(38, activation='softmax'))
</code></pre>
<p>适用于model.fit():</p>
<pre><code>model.fit(X_train, y_train_categorical,
batch_size=32, epochs=5, verbose=1)
</code></pre>
<p>但是,在测试评估时</p>
<pre><code>loss, accuracy = model.evaluate(X_test, y_test_categorical, verbose=0)
print('Loss: ', loss,'\nAcc: ', accuracy)
</code></pre>
<p>我得到这个错误:</p>
<pre><code>ValueError: Error when checking target: expected dense_2 to have shape (38,) but got array with shape (34,)
</code></pre>
<p>我怎样做<code>y_train_categorical.shape[1]</code>&<code>y_test_categorical.shape[1]</code>相同,或者有什么简单的解决方案可以解决我的上一个错误(在测试中评估模型时)</p>