【问题标题】:How do I train a neural network with an array of list using keras in python如何在 python 中使用 keras 训练具有列表数组的神经网络
【发布时间】:2019-08-25 19:51:09
【问题描述】:

我正在尝试使用 tensorflow.keras 训练神经网络,但我不明白如何使用 numpy 列表数组(在 python3 中)训练它。

我试图改变图层的输入形状,但我不太明白它是如何工作的。

import tensorflow as tf
from tensorflow import keras
import numpy as np

# Create the array of data

train_data = [[1.0,2.0,3.0],[4.0,5.0,6.0]]
train_data_np = np.asarray(train_data)
train_label = [[1,2,3],[4,5,6]]
train_label_np = np.asarray(train_data)

### Build the model

model = keras.Sequential([
    keras.layers.Dense(3,input_shape =(3,2)),
    keras.layers.Dense(3,activation=tf.nn.sigmoid)
])

model.compile(optimizer='sgd',loss='sparse_categorical_crossentropy',metrics=['accuracy'])

#Train the model

model.fit(train_data_np,train_label_np,epochs=10)

当调用 model.fit 时,错误是“检查输入时出错:预期的 dense_input 具有 3 个维度,但得到的数组的形状为 (2, 3)”。

【问题讨论】:

  • 要么对二维数组使用卷积层(形状 3,2),要么必须展平数组,因此形状为 3,用于密集层。而且我不知道您的最后一层具有 sigmoid 函数如何适合 2、3、4、5 甚至 6。您的火车标签将是 [[1,0,0], [0,1,0]]例如...尝试阅读an introduction to Keras

标签: python tensorflow keras


【解决方案1】:

在定义 Keras 模型时,您必须为模型的第一层提供输入形状。

例如,如果您的训练数据有n 行和m 特征,即形状:(n,m),您必须将模型的第一个Dense 层的input_shape 设置为@987654325 @ 即模型应该期待 m 特征进入它。

现在来看看你的玩具数据,

train_data = [[1.0,2.0,3.0],[4.0,5.0,6.0]]
train_data_np = np.asarray(train_data)
train_label = [[1,2,3],[4,5,6]]
train_label_np = np.asarray(train_label)

这里,train_data_np.shape 是(2, 3) 即2 行和3 特征,那么你必须像这样定义模型,

model = keras.Sequential([
    keras.layers.Dense(3,input_shape =(3, )),
    keras.layers.Dense(3,activation=tf.nn.sigmoid)
])

现在,您的标签是 [[1,2,3],[4,5,6]]。在正常的3 类分类任务中,这将是一个带有1 和0s 的单热向量。但是让我们把它放在一边,因为这是一个检查 Keras 的玩具示例。

如果目标标签即y_train 是one-hot,那么您必须使用categorical_crossentropy loss 而不是sparse_categorical_crossentropy。

所以你可以像这样编译和训练模型

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

#Train the model

model.fit(train_data_np,train_label_np,epochs=10)


Epoch 1/10
2/2 [==============================] - 0s 61ms/step - loss: 11.5406 - acc: 0.0000e+00
Epoch 2/10
2/2 [==============================] - 0s 0us/step - loss: 11.4970 - acc: 0.5000
Epoch 3/10
2/2 [==============================] - 0s 0us/step - loss: 11.4664 - acc: 0.5000
Epoch 4/10
2/2 [==============================] - 0s 498us/step - loss: 11.4430 - acc: 0.5000
Epoch 5/10
2/2 [==============================] - 0s 496us/step - loss: 11.4243 - acc: 1.0000
Epoch 6/10
2/2 [==============================] - 0s 483us/step - loss: 11.4087 - acc: 1.0000
Epoch 7/10
2/2 [==============================] - 0s 1ms/step - loss: 11.3954 - acc: 1.0000
Epoch 8/10
2/2 [==============================] - 0s 997us/step - loss: 11.3840 - acc: 1.0000
Epoch 9/10
2/2 [==============================] - 0s 1ms/step - loss: 11.3740 - acc: 1.0000
Epoch 10/10
2/2 [==============================] - 0s 995us/step - loss: 11.3653 - acc: 1.0000

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 2017-07-14
    • 1970-01-01
    • 2017-11-27
    • 2018-03-16
    • 2017-06-08
    • 2017-12-05
    • 2019-12-17
    • 2011-04-07
    相关资源
    最近更新 更多