File size: 4,332 Bytes
4118354
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import streamlit as st
import matplotlib.pyplot as plt

from keras.datasets import mnist,imdb
from sklearn.preprocessing import MinMaxScaler
from keras.models import Model,Sequential
from keras.layers import Conv2D,MaxPooling2D,InputLayer,Dense,Flatten

m = MinMaxScaler()
with st.sidebar:
    option = st.selectbox("Datasets",["Select dataset","Hand Writen Digit Dataset","imdb"])
    if option == "Hand Writen Digit Dataset":
        (x_train,y_train),(x_test,y_test) = mnist.load_data()
        st.success(f"Successfully Load the mnist Dataset")
    elif option == "imdb":
        (x_train,y_train),(x_test,y_test) = imdb.load_data()
        st.success(f"Successfully Load the imdb Dataset")
    
    col1, col2 = st.columns(2)
    with col1:
        epochs = st.number_input("Epochs (100 - 2000)", 5, 2000, step=5)
    with col2:
        neuron_input = st.text_input("Neurons per Layer (comma-separated, e.g. 5,4,3)")
        neurons_per_layer = [int(n.strip()) for n in neuron_input.split(",") if n.strip().isdigit()]

    submit = st.button("Train")


if submit:
    model = Sequential()
    model.add(InputLayer(shape=(28,28,1)))
    model.add(Conv2D(filters=6,kernel_size=(5,5),activation="tanh",padding="valid",strides=(1,1)))
    model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))
    model.add(Conv2D(filters=16,kernel_size=(5,5),activation="tanh",padding="same",strides=(1,1)))
    model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))
    model.add(Conv2D(filters=30,kernel_size=(5,5),activation="tanh",padding="valid",strides=(1,1)))
    model.add(Flatten())
    for i in neurons_per_layer:
        model.add(Dense(units=i,activation="tanh"))
    model.add(Dense(10,activation="softmax"))
    model.compile(optimizer="sgd",loss="sparse_categorical_crossentropy",metrics=["accuracy"])
    model.fit(x_train, y_train, epochs=3, batch_size=128, validation_split=0.4,verbose=False)
    history = model.fit(
        x_train, y_train,
        batch_size=128,
        epochs=epochs,
        validation_split=0.4,
        verbose=0
    )

    fig, axs = plt.subplots(6, 1, figsize=(8, 6))
    col1,col2,col3,col4,col5,col6 = st.columns(6)
    with col1:
        st.write("Filters")
        for i in range(6):
            axs[i].imshow(
                m.fit_transform(model.layers[0].weights[0][:, :, :, i][:, :, 0]),
                cmap="gray"
            )
            axs[i].axis("off")
        st.pyplot(fig)
    with col2:
        st.write("Conv2D Layer-1")
        sub = Model(inputs=model.inputs[0],outputs=model.layers[0].output)
        fig,ax = plt.subplots(6,1,figsize=(8,6))
        for i in range(6):
            ax[i].imshow(sub.predict(x_train[0:1,:].reshape(1,28,28,1))[0,:,:,i],cmap="gray")
            ax[i].axis("off")
        st.pyplot(fig)
    with col3:
        st.write("Average Pooling Layer-1")
        max1 = Model(inputs=model.inputs[0],outputs=model.layers[1].output)
        fig,ax1 = plt.subplots(6,1,figsize=(8,6))
        for i in range(6):
            ax1[i].imshow(max1.predict(x_train[0:1,:].reshape(1,28,28,1))[0,:,:,i],cmap="gray")
            ax1[i].axis("off")
        st.pyplot(fig)
    
    with col4:
        st.write("Conv2D Layer-2")
        sub1 = Model(inputs=model.inputs[0],outputs=model.layers[2].output)
        fig,ax2 = plt.subplots(16,1,figsize=(8,6))
        for i in range(16):
            ax2[i].imshow(sub1.predict(x_train[0:1,:].reshape(1,28,28,1))[0,:,:,i],cmap="gray")
            ax2[i].axis("off")
        st.pyplot(fig)
    with col5:
        st.write("Average Pooling Layer-2")
        max2 = Model(inputs=model.inputs[0],outputs=model.layers[3].output)
        fig,ax3 = plt.subplots(16,1,figsize=(8,6))
        for i in range(16):
            ax3[i].imshow(max2.predict(x_train[0:1,:].reshape(1,28,28,1))[0,:,:,i],cmap="gray")
            ax3[i].axis("off")
        st.pyplot(fig)
    with col6:
        st.write("Conv2D Layer-3")
        sub3 = Model(inputs=model.inputs[0],outputs=model.layers[4].output)
        fig,ax4 = plt.subplots(120,1,figsize=(8,6))
        for i in range(120):
            ax4[i].imshow(sub3.predict(x_train[0:1,:].reshape(1,28,28,1))[0,:,:,i],cmap="gray")
            ax4[i].axis("off")
        st.pyplot(fig)