Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)]

Type "copyright", "credits" or "license" for more information.


IPython 7.29.0 -- An enhanced Interactive Python.


In [1]:

   ...: """

   ...: Purpose: Train and test a CNN model using spectrograms of the DAIC dataset.

   ...: """

   ...:

   ...: from tensorflow.keras.preprocessing.image import ImageDataGenerator

   ...: import numpy as np

   ...: import os

   ...: import pandas as pd

   ...: from tensorflow.keras.models import Sequential

   ...: from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

   ...: from tensorflow.keras.optimizers import RMSprop

   ...:

   ...:

   ...: train_datagen = ImageDataGenerator(

   ...: rescale=1./255, # normalize pixel values

   ...: rotation_range=20, # rotate images by up to 20 degrees

   ...: width_shift_range=0.1, # shift images horizontally by up to 10%

   ...: height_shift_range=0.1, # shift images vertically by up to 10%

   ...: shear_range=0.1, # apply shearing transformation

   ...: zoom_range=0.1, # zoom in on images by up to 10%

   ...: horizontal_flip=True, # flip images horizontally

   ...: fill_mode='nearest' # fill in missing pixels with nearest value

   ...: )

   ...:

   ...:

   ...: val_datagen = ImageDataGenerator(rescale=1./255)

   ...:

   ...: train_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\train'

   ...: val_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\dev'

   ...:

   ...: batch_size = 16

   ...:

   ...: target_size = (224, 224)

   ...:

   ...:

   ...: df_li=[]

   ...:

   ...: flist=os.listdir(train_dir)

   ...: df = pd.DataFrame(flist, columns=['file_path'])

   ...: df["train_test_dev"]="train"

   ...: df_li.append(df)

   ...:

   ...: flist=os.listdir(val_dir)

   ...: df = pd.DataFrame(flist, columns=['file_path'])

   ...: df["train_test_dev"]="dev"

   ...: df_li.append(df)

   ...:

   ...:

   ...: test_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\test'

   ...:

   ...: flist=os.listdir(test_dir)

   ...: df = pd.DataFrame(flist, columns=['file_path'])

   ...: df["train_test_dev"]="test"

   ...: df_li.append(df)

   ...: concatenated_df = pd.concat(df_li, ignore_index=True)

   ...:

   ...: index_df=pd.read_csv(r"C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\daicwoz_index_combined.csv")

   ...:

   ...: concatenated_df['Participant_ID'] = concatenated_df['file_path'].str.split('_').str[0]

   ...:

   ...: print(concatenated_df)

   ...:

   ...: index_df['Participant_ID'] = index_df['Participant_ID'].astype(str)

   ...:

   ...:

   ...:

   ...: merged_df=pd.merge(left=concatenated_df,right=index_df,left_on='Participant_ID',

   ...: right_on='Participant_ID')

   ...:

   ...:

   ...: train_datagen = ImageDataGenerator(

   ...: rescale=1./255,

   ...: rotation_range=20,

   ...: width_shift_range=0.1,

   ...: height_shift_range=0.1,

   ...: shear_range=0.1,

   ...: zoom_range=0.1,

   ...: horizontal_flip=True,

   ...: fill_mode='nearest'

   ...: )

   ...:

   ...:

   ...: val_datagen = ImageDataGenerator(rescale=1./255)

   ...:

   ...:

   ...:

   ...:

   ...: target_size = (224, 224)

   ...:

   ...:

   ...: batch_size = 16

   ...:

   ...: train_generator = train_datagen.flow_from_dataframe(

   ...: merged_df[merged_df['train_test_dev_x'] == 'train'],

   ...: directory=train_dir,

   ...: x_col='file_path',

   ...: y_col='PHQ8_Score',

   ...: target_size=target_size,

   ...: batch_size=batch_size,

   ...: class_mode='raw'

   ...: )

   ...:

   ...: val_generator = val_datagen.flow_from_dataframe(

   ...: merged_df[merged_df['train_test_dev_x'] == 'dev'],

   ...: directory=val_dir,

   ...: x_col='file_path',

   ...: y_col='PHQ8_Score',

   ...: target_size=target_size,

   ...: batch_size=batch_size,

   ...: class_mode='raw'

   ...: )

   ...:

   ...: model = Sequential()

   ...: model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))

   ...: model.add(MaxPooling2D((2, 2)))

   ...: model.add(Conv2D(32, (3, 3), activation='relu'))

   ...: model.add(MaxPooling2D((2, 2)))

   ...: model.add(Conv2D(64, (3, 3), activation='relu'))

   ...: model.add(MaxPooling2D((2, 2)))

   ...: model.add(Flatten())

   ...: model.add(Dense(512, activation='relu'))

   ...: model.add(Dense(256, activation='relu'))

   ...: model.add(Dense(1))

   ...:

   ...:

   ...: model.compile(loss='mean_squared_error', optimizer=RMSprop(lr=0.001), metrics=['mse'])

   ...:

   ...:

   ...: history = model.fit(

   ...: train_generator,

   ...: epochs=10, # Adjust number of epochs as needed

   ...: validation_data=val_generator

   ...: )

   ...:

   ...:

   ...: test_datagen = ImageDataGenerator(rescale=1./255)

   ...:

   ...:

   ...: test_generator = test_datagen.flow_from_dataframe(

   ...: merged_df[merged_df['train_test_dev_x'] == 'test'],

   ...: directory=test_dir,

   ...: x_col='file_path',

   ...: y_col='PHQ8_Score',

   ...: target_size=target_size,

   ...: batch_size=batch_size,

   ...: class_mode='raw'

   ...: )

   ...:

   ...:

   ...: test_loss, test_mse = model.evaluate(test_generator)

   ...:

   ...: print("Test MSE:", test_mse)

   ...:

   ...:

   ...: print("Test RMSE:", test_mse** 0.5)

   ...:

   ...:

   ...:

   ...: from sklearn.metrics import mean_absolute_error

   ...:

   ...:

   ...: test_loss, test_mse = model.evaluate(test_generator)

   ...:

   ...:

   ...: predictions = model.predict(test_generator)

   ...:

   ...:

   ...: true_labels = test_generator.labels

   ...:

   ...:

   ...: mae = mean_absolute_error(true_labels, predictions)

   ...:

   ...: print("Test MSE:", test_mse)

   ...: print("Test MAE:", mae)

file_path train_test_dev Participant_ID

0 303_AUDIO_libmelspec.jpg train 303

1 304_AUDIO_libmelspec.jpg train 304

2 305_AUDIO_libmelspec.jpg train 305

3 310_AUDIO_libmelspec.jpg train 310

4 312_AUDIO_libmelspec.jpg train 312

.. ... ... ...

184 467_AUDIO_libmelspec.jpg test 467

185 469_AUDIO_libmelspec.jpg test 469

186 470_AUDIO_libmelspec.jpg test 470

187 480_AUDIO_libmelspec.jpg test 480

188 481_AUDIO_libmelspec.jpg test 481


[189 rows x 3 columns]

Found 107 validated image filenames.

Found 35 validated image filenames.

WARNING:absl:`lr` is deprecated, please use `learning_rate` instead, or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.RMSprop.

Epoch 1/10


2024-12-23 02:59:14.788360: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX AVX2

To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.

7/7 [==============================] - 5s 605ms/step - loss: 334.4738 - mse: 334.4738 - val_loss: 46.3762 - val_mse: 46.3762

Epoch 2/10

7/7 [==============================] - 4s 536ms/step - loss: 41.6043 - mse: 41.6043 - val_loss: 47.7859 - val_mse: 47.7859

Epoch 3/10

7/7 [==============================] - 4s 542ms/step - loss: 34.3368 - mse: 34.3368 - val_loss: 45.5575 - val_mse: 45.5575

Epoch 4/10

7/7 [==============================] - 4s 561ms/step - loss: 36.4852 - mse: 36.4852 - val_loss: 46.8101 - val_mse: 46.8101

Epoch 5/10

7/7 [==============================] - 4s 541ms/step - loss: 35.6259 - mse: 35.6259 - val_loss: 47.7516 - val_mse: 47.7516

Epoch 6/10

7/7 [==============================] - 4s 535ms/step - loss: 31.7727 - mse: 31.7727 - val_loss: 49.8830 - val_mse: 49.8830

Epoch 7/10

7/7 [==============================] - 4s 541ms/step - loss: 38.7467 - mse: 38.7467 - val_loss: 44.3217 - val_mse: 44.3217

Epoch 8/10

7/7 [==============================] - 4s 581ms/step - loss: 34.3152 - mse: 34.3152 - val_loss: 45.3872 - val_mse: 45.3872

Epoch 9/10

7/7 [==============================] - 4s 545ms/step - loss: 31.2468 - mse: 31.2468 - val_loss: 43.7906 - val_mse: 43.7906

Epoch 10/10

7/7 [==============================] - 4s 540ms/step - loss: 36.1619 - mse: 36.1619 - val_loss: 56.6529 - val_mse: 56.6529

Found 47 validated image filenames.

3/3 [==============================] - 0s 77ms/step - loss: 60.7944 - mse: 60.7944

Test MSE: 60.7944450378418

Test RMSE: 7.797079263278128

3/3 [==============================] - 0s 67ms/step - loss: 60.7944 - mse: 60.7944

3/3 [==============================] - 0s 63ms/step

Test MSE: 60.7944450378418

Test MAE: 6.8604941063738885


In [2]:

   ...: """

   ...: Purpose: Train and test a CNN model using spectrograms of the DAIC dataset.

   ...: """

   ...:

   ...: from tensorflow.keras.preprocessing.image import ImageDataGenerator

   ...: import numpy as np

   ...: import os

   ...: import pandas as pd

   ...: from tensorflow.keras.models import Sequential

   ...: from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense

   ...: from tensorflow.keras.optimizers import RMSprop

   ...:

   ...:

   ...: train_datagen = ImageDataGenerator(

   ...: rescale=1./255, # normalize pixel values

   ...: rotation_range=20, # rotate images by up to 20 degrees

   ...: width_shift_range=0.1, # shift images horizontally by up to 10%

   ...: height_shift_range=0.1, # shift images vertically by up to 10%

   ...: shear_range=0.1, # apply shearing transformation

   ...: zoom_range=0.1, # zoom in on images by up to 10%

   ...: horizontal_flip=True, # flip images horizontally

   ...: fill_mode='nearest' # fill in missing pixels with nearest value

   ...: )

   ...:

   ...:

   ...: val_datagen = ImageDataGenerator(rescale=1./255)

   ...:

   ...: train_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\train'

   ...: val_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\dev'

   ...:

   ...: batch_size = 16

   ...:

   ...: target_size = (224, 224)

   ...:

   ...:

   ...: df_li=[]

   ...:

   ...: flist=os.listdir(train_dir)

   ...: df = pd.DataFrame(flist, columns=['file_path'])

   ...: df["train_test_dev"]="train"

   ...: df_li.append(df)

   ...:

   ...: flist=os.listdir(val_dir)

   ...: df = pd.DataFrame(flist, columns=['file_path'])

   ...: df["train_test_dev"]="dev"

   ...: df_li.append(df)

   ...:

   ...:

   ...: test_dir = r'C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\lib_melspec_cnn\test'

   ...:

   ...: flist=os.listdir(test_dir)

   ...: df = pd.DataFrame(flist, columns=['file_path'])

   ...: df["train_test_dev"]="test"

   ...: df_li.append(df)

   ...: concatenated_df = pd.concat(df_li, ignore_index=True)

   ...:

   ...: index_df=pd.read_csv(r"C:\Users\marks\Dropbox\JAR Registered Report\Final_version_submisison\data\daicwoz_index_combined.csv")

   ...:

   ...: concatenated_df['Participant_ID'] = concatenated_df['file_path'].str.split('_').str[0]

   ...:

   ...: print(concatenated_df)

   ...:

   ...: index_df['Participant_ID'] = index_df['Participant_ID'].astype(str)

   ...:

   ...:

   ...:

   ...: merged_df=pd.merge(left=concatenated_df,right=index_df,left_on='Participant_ID',

   ...: right_on='Participant_ID')

   ...:

   ...:

   ...: train_datagen = ImageDataGenerator(

   ...: rescale=1./255,

   ...: rotation_range=20,

   ...: width_shift_range=0.1,

   ...: height_shift_range=0.1,

   ...: shear_range=0.1,

   ...: zoom_range=0.1,

   ...: horizontal_flip=True,

   ...: fill_mode='nearest'

   ...: )

   ...:

   ...:

   ...: val_datagen = ImageDataGenerator(rescale=1./255)

   ...:

   ...:

   ...:

   ...:

   ...: target_size = (224, 224)

   ...:

   ...:

   ...: batch_size = 16

   ...:

   ...: train_generator = train_datagen.flow_from_dataframe(

   ...: merged_df[merged_df['train_test_dev_x'] == 'train'],

   ...: directory=train_dir,

   ...: x_col='file_path',

   ...: y_col='PHQ8_Score',

   ...: target_size=target_size,

   ...: batch_size=batch_size,

   ...: class_mode='raw'

   ...: )

   ...:

   ...: val_generator = val_datagen.flow_from_dataframe(

   ...: merged_df[merged_df['train_test_dev_x'] == 'dev'],

   ...: directory=val_dir,

   ...: x_col='file_path',

   ...: y_col='PHQ8_Score',

   ...: target_size=target_size,

   ...: batch_size=batch_size,

   ...: class_mode='raw'

   ...: )

   ...:

   ...: model = Sequential()

   ...: model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3)))

   ...: model.add(MaxPooling2D((2, 2)))

   ...: model.add(Conv2D(32, (3, 3), activation='relu'))

   ...: model.add(MaxPooling2D((2, 2)))

   ...: model.add(Conv2D(64, (3, 3), activation='relu'))

   ...: model.add(MaxPooling2D((2, 2)))

   ...: model.add(Flatten())

   ...: model.add(Dense(512, activation='relu'))

   ...: model.add(Dense(256, activation='relu'))

   ...: model.add(Dense(1))

   ...:

   ...:

   ...: model.compile(loss='mean_squared_error', optimizer=RMSprop(lr=0.001), metrics=['mse'])

   ...:

   ...:

   ...: history = model.fit(

   ...: train_generator,

   ...: epochs=10, # Adjust number of epochs as needed

   ...: validation_data=val_generator

   ...: )

   ...:

   ...:

   ...: test_datagen = ImageDataGenerator(rescale=1./255)

   ...:

   ...:

   ...: test_generator = test_datagen.flow_from_dataframe(

   ...: merged_df[merged_df['train_test_dev_x'] == 'test'],

   ...: directory=test_dir,

   ...: x_col='file_path',

   ...: y_col='PHQ8_Score',

   ...: target_size=target_size,

   ...: batch_size=batch_size,

   ...: class_mode='raw'

   ...: )

   ...:

   ...:

   ...: test_loss, test_mse = model.evaluate(test_generator)

   ...:

   ...: print("Test MSE:", test_mse)

   ...:

   ...:

   ...: print("Test RMSE:", test_mse** 0.5)

   ...:

   ...:

   ...:

   ...: from sklearn.metrics import mean_absolute_error

   ...:

   ...:

   ...: test_loss, test_mse = model.evaluate(test_generator)

   ...:

   ...:

   ...: predictions = model.predict(test_generator)

   ...:

   ...:

   ...: true_labels = test_generator.labels

   ...:

   ...:

   ...: mae = mean_absolute_error(true_labels, predictions)

   ...:

   ...: print("Test MSE:", test_mse)

   ...: print("Test MAE:", mae)

file_path train_test_dev Participant_ID

0 303_AUDIO_libmelspec.jpg train 303

1 304_AUDIO_libmelspec.jpg train 304

2 305_AUDIO_libmelspec.jpg train 305

3 310_AUDIO_libmelspec.jpg train 310

4 312_AUDIO_libmelspec.jpg train 312

.. ... ... ...

184 467_AUDIO_libmelspec.jpg test 467

185 469_AUDIO_libmelspec.jpg test 469

186 470_AUDIO_libmelspec.jpg test 470

187 480_AUDIO_libmelspec.jpg test 480

188 481_AUDIO_libmelspec.jpg test 481


[189 rows x 3 columns]

Found 107 validated image filenames.

Found 35 validated image filenames.

WARNING:absl:`lr` is deprecated, please use `learning_rate` instead, or use the legacy optimizer, e.g.,tf.keras.optimizers.legacy.RMSprop.

Epoch 1/10

7/7 [==============================] - 5s 589ms/step - loss: 247.9928 - mse: 247.9928 - val_loss: 46.4466 - val_mse: 46.4466

Epoch 2/10

7/7 [==============================] - 4s 524ms/step - loss: 38.4016 - mse: 38.4016 - val_loss: 45.6399 - val_mse: 45.6399

Epoch 3/10

7/7 [==============================] - 4s 521ms/step - loss: 32.6128 - mse: 32.6128 - val_loss: 48.4184 - val_mse: 48.4184

Epoch 4/10

7/7 [==============================] - 4s 527ms/step - loss: 37.6835 - mse: 37.6835 - val_loss: 48.7759 - val_mse: 48.7759

Epoch 5/10

7/7 [==============================] - 4s 521ms/step - loss: 33.9311 - mse: 33.9311 - val_loss: 44.5810 - val_mse: 44.5810

Epoch 6/10

7/7 [==============================] - 4s 548ms/step - loss: 36.5681 - mse: 36.5681 - val_loss: 42.4600 - val_mse: 42.4600

Epoch 7/10

7/7 [==============================] - 4s 543ms/step - loss: 37.3873 - mse: 37.3873 - val_loss: 56.0737 - val_mse: 56.0737

Epoch 8/10

7/7 [==============================] - 4s 532ms/step - loss: 32.0164 - mse: 32.0164 - val_loss: 45.1685 - val_mse: 45.1685

Epoch 9/10

7/7 [==============================] - 4s 534ms/step - loss: 37.4296 - mse: 37.4296 - val_loss: 48.0202 - val_mse: 48.0202

Epoch 10/10

7/7 [==============================] - 4s 546ms/step - loss: 37.2004 - mse: 37.2004 - val_loss: 42.0721 - val_mse: 42.0721

Found 47 validated image filenames.

3/3 [==============================] - 0s 69ms/step - loss: 41.9760 - mse: 41.9760

Test MSE: 41.9759635925293

Test RMSE: 6.478885983911841

3/3 [==============================] - 0s 69ms/step - loss: 41.9760 - mse: 41.9760

3/3 [==============================] - 0s 74ms/step

Test MSE: 41.9759635925293

Test MAE: 5.4885614070486515


In [3]: