python - 无法挤压 dim[1],预期维度为 1,得到 2
问题描述
我有非常简单的输入:点,我正在尝试对它们是否在某个区域进行分类。所以我的训练数据是 shape (1000000, 2)
,它是一个数组形式:[ [x1,y1], [x2,y2],... ]
我的标签是类似的形式(Shaped (10000, 2)
):(
[ [1,0], [0,1], [0,1],... ]
表示[0,1]
该点在该区域中,[1,0]
表示它不在)
我的模型是这样设置的:
import tensorflow as tf
from tensorflow import keras
import numpy as np
# Reads the points and labels from .csv format files
train_data = np.genfromtxt('data/train_data.csv', delimiter=',')
train_labels = np.genfromtxt('data/train_labels.csv', delimiter=',')
model = keras.models.Sequential()
model.add(keras.layers.Dense(128, activation='relu', input_shape=(2,)))
model.add(keras.layers.Dense(128, activation='relu'))
model.add(keras.layers.Dense(2, activation='softmax'))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_data, train_labels, epochs=1, batch_size=100, verbose=1) # ERROR
请注意,输入形状是(2,)
,这意味着(根据参考)模型将期望形式为 的数组(*, 2)
。
我收到错误消息:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got 2
我不知道为什么。有什么建议么?
堆栈跟踪:
Traceback (most recent call last):
File "C:/Users/omer/Desktop/Dots/train.py", line 25, in <module>
model.fit(train_data, train_labels, epochs=1, batch_size=100, verbose=1)
File "C:\Users\omer\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 880, in fit
validation_steps=validation_steps)
File "C:\Users\omer\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_arrays.py", line 329, in model_iteration
batch_outs = f(ins_batch)
File "C:\Users\omer\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\backend.py", line 3076, in __call__
run_metadata=self.run_metadata)
File "C:\Users\omer\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\client\session.py", line 1439, in __call__
run_metadata_ptr)
File "C:\Users\omer\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 528, in __exit__
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Can not squeeze dim[1], expected a dimension of 1, got 2
[[{{node metrics/acc/Squeeze}}]]
解决方案
您的标签形状错误。请参阅文档:
使用
sparse_categorical_crossentropy
损失时,您的目标应该是整数目标。如果您有分类目标,则应使用categorical_crossentropy
因此,您需要将标签转换为整数:
train_labels = np.argmax(train_labels, axis=1)
推荐阅读
- firefox-addon - Firefox 插件 - 读取传入的 xhr 响应
- html - 设置元素的宽度严格等于它的文本内容
- xml - XPath 表达式有条件地获取相邻节点
- javascript - Cannot bind vue store to state
- r - latex kable 并排桌“不在外部标准模式”
- sass - 媒体选择器“扩展”引导 SASS 类
- python - 选择优化函数的数组子样本
- javascript - 为什么 JavaScript UpdateExpression 语法如此定义?
- vba - 按日期过滤 - VBA
- raku - Perl 6 的最长标记匹配中的非贪婪模式是什么?