Tensorflow : logits and labels must have the same first dimension

前端 未结 5 2187
迷失自我
迷失自我 2020-12-16 03:13

I am new in tensoflow and I want to adapt the MNIST tutorial https://www.tensorflow.org/tutorials/layers with my own data (images of 40x40). This is my model function :

5条回答
  •  [愿得一人]
    2020-12-16 03:54

    The problem is in your target shape and is related to the correct choice of an appropriate loss function. you have 2 possibilities:

    1. possibility: if you have 1D integer encoded target, you can use sparse_categorical_crossentropy as loss function

    n_class = 3
    n_features = 100
    n_sample = 1000
    
    X = np.random.randint(0,10, (n_sample,n_features))
    y = np.random.randint(0,n_class, n_sample)
    
    inp = Input((n_features,))
    x = Dense(128, activation='relu')(inp)
    out = Dense(n_class, activation='softmax')(x)
    
    model = Model(inp, out)
    model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
    history = model.fit(X, y, epochs=3)
    

    2. possibility: if you have one-hot encoded your target in order to have 2D shape (n_samples, n_class), you can use categorical_crossentropy

    n_class = 3
    n_features = 100
    n_sample = 1000
    
    X = np.random.randint(0,10, (n_sample,n_features))
    y = pd.get_dummies(np.random.randint(0,n_class, n_sample)).values
    
    inp = Input((n_features,))
    x = Dense(128, activation='relu')(inp)
    out = Dense(n_class, activation='softmax')(x)
    
    model = Model(inp, out)
    model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
    history = model.fit(X, y, epochs=3)
    

提交回复
热议问题