python - 使用神经网络进行分类
问题描述
我已经建立了一个用于分类的 NN,但是在尝试编译时,我遇到了输入和输出维度的问题:
from keras.models import Sequential
from keras.layers import Dense
# data splited into input (X) and output (y) variables
model = Sequential()
model.add(Dense(12, input_dim=456, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(8, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
这是我的尺寸y
和X
print(y.shape, X.shape)
(8000, 1) (8000, 456, 3)
我有 8000 个子集,其中包含 456 个粒子(x,y,z);我有 y 范围从 0 到 7 的标签;这也是为什么我的输出层有 8 个节点的原因。
但是当我适应
model.fit(X, y, epochs=15, batch_size=10)
我不明白为什么会发生此错误:
ValueError:检查输入时出错:预期dense_26_input有2维,但得到的数组形状为(8000、456、3)
有什么建议么?
解决方案
要回答您的问题,您可以通过以下方式实现您想要的:
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(12, input_shape=(456,3), activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(8, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
编辑:
我认为您正在寻找的是那种架构:
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Dense, Flatten
model = Sequential()
model.add(Dense(12, input_shape=(456,3), activation='relu'))
model.add(Flatten())
model.add(Dense(8, activation='relu'))
model.add(Dense(8, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
所以它只输出8个标签
推荐阅读
- reactjs - 在开发中重新加载 ReactJS 页面让我空白
- java - 定制的 Tomcat JNDI 数据源
- json - 无法解码 JSON 字符串
- html - 对无序列表中的每一行使用 :not(:last-child):after 伪元素
- sql - UPDATE 语句中的 SQL 案例表达式
- html - 单击表格行 - 选择复选框
- charts - Heatbar,文本的动态位置偏移
- ansible - debian systemd:ceph-osd@x.service:在步骤 LIMITS 生成 /usr/lib/ceph/ceph-osd-prestart.sh 时失败:不允许操作
- javascript - AppModule 中导入的共享模块
- javascript - 如何实现div与另一个div重叠?