python - 设计一个神经网络来预测 Keras 中的数字数组
问题描述
我是机器学习的新手,对 ML 库几乎没有经验。我正在开发一个神经网络来预测给定输入数组的数字数组。所以我的输入如下:
神经网络的输入是一个长度为 100 的数组。
和输出:
模型的输出是长度为 60 的数组。
到目前为止,我在这里发布了我的代码。它目前不工作。有人可以帮助我以正确的方式做到这一点吗?
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(100,)))
model.add(tf.keras.layers.Dense(768, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(768, activation=tf.nn.relu))
model.add(tf.keras.layers.Dense(60, activation=tf.nn.softmax))
model.compile(optimizer = 'adam',
loss = 'sparse_categorical_crossentropy',
metrices = ['accuracy'])
model.fit(x_train_new, y_train_new, epochs = 20)
注意: x_train_new
是一个长度为 100y_train_new
的数组,是一个长度为 60 的数组。
当我运行它并调用时,model.fit()
将出现以下错误。
ValueError Traceback (most recent call last)
<ipython-input-62-33e8f1dfe4c8> in <module>()
5 # print(y_train_new.shape)
6
----> 7 model.fit(x_train_new, y_train_new, epochs = 20)
/home/vajira/tf_cpu_py3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, **kwargs)
1276 steps_name='steps_per_epoch',
1277 steps=steps_per_epoch,
-> 1278 validation_split=validation_split)
1279
1280 # Prepare validation data.
/home/vajira/tf_cpu_py3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training.py in _standardize_user_data(self, x, y, sample_weight, class_weight, batch_size, check_steps, steps_name, steps, validation_split)
915 feed_output_shapes,
916 check_batch_axis=False, # Don't enforce the batch size.
--> 917 exception_prefix='target')
918
919 # Generate sample-wise weight values given the `sample_weight` and
/home/vajira/tf_cpu_py3/lib/python3.6/site-packages/tensorflow/python/keras/engine/training_utils.py in standardize_input_data(data, names, shapes, check_batch_axis, exception_prefix)
189 'Error when checking ' + exception_prefix + ': expected ' +
190 names[i] + ' to have shape ' + str(shape) +
--> 191 ' but got array with shape ' + str(data_shape))
192 return data
193
ValueError: Error when checking target: expected dense_14 to have shape (1,) but got array with shape (60,)
解决方案
您必须为第一层指定输入形状:
model.add(tf.keras.layers.Flatten(input_shape=(100,)))
但是,如果输入是长度为 100 的向量,则不需要Flatten
层,因为它已经被展平。相反,input_shape
为第一Dense
层设置并删除该Flatten
层。
更新:关于形状不匹配错误,要么categorical_crossentropy
用作损失函数并传递大小为 60 的 one-hot 编码标签,要么使用sparse_categorical_crossentropy
并传递整数标签(即 0 或 1 或 2 等)。不要混合这两件事:目前您正在使用sparse_categorical_crossentropy
并将 one-hot 编码标签传递给fit()
方法。因此,您会收到形状不匹配错误。
旁注:正如评论中提到的@Alexis,请在提问时添加您得到的错误(如果适用)。
推荐阅读
- ios - 即使我在 viewWillAppear 中注册并在 viewWillDissapear 中取消注册,也会多次调用观察者方法
- mysql - MySQL where 条件只引用了一个列,是什么意思?
- apache-kafka - 企业级集群流媒体系统
- javascript - 插入了输入单选类型的按钮
- python - 如何计算时间并找到剩余小时数
- java - 没有hibernate.cfg.xml的IntelliJ Hibernate方面?
- css - 使用 scss 使 svg 中的文本居中
- firebase - 扩展 Firebase 用户
- python - 如何对数据框使用“应用”并避免 SettingWithCopyWarning?
- asp.net-web-api2 - 将字节数组发送到 API